Come creare una query in un database di SQL Server 2017.
Una delle query più basilari che puoi fare è questa:
SELECT * FROM TableName;
Questa query restituisce tutti i dati da una determinata tabella. TableName
è il nome della tabella che vuoi interrogare. Tutto quello che devi fare è sostituirlo con il nome di una tabella nel tuo database, eseguire la query e il contenuto di quella tabella verrà visualizzato.
Il nostro database è composto da tre tabelle. Ciascuno contiene dati. Vediamo cosa c'è in ogni tabella.
Gli Artists
tabella:
SELECT * FROM Artists;Risultato
ArtistId ArtistName ActiveFrom -------- ---------------------- ------------------------ 1 Iron Maiden 1975-12-25T00:00:00.000Z 2 AC/DC 1973-01-11T00:00:00.000Z 3 Allan Holdsworth 1969-01-01T00:00:00.000Z 4 Buddy Rich 1919-01-01T00:00:00.000Z 5 Devin Townsend 1993-01-01T00:00:00.000Z 6 Jim Reeves 1948-01-01T00:00:00.000Z 7 Tom Jones 1963-01-01T00:00:00.000Z 8 Maroon 5 1994-01-01T00:00:00.000Z 9 The Script 2001-01-01T00:00:00.000Z 10 Lit 1988-06-26T00:00:00.000Z 11 Black Sabbath 1968-01-01T00:00:00.000Z 12 Michael Learns to Rock 1988-03-15T00:00:00.000Z 13 Carabao 1981-01-01T00:00:00.000Z 14 Karnivool 1997-01-01T00:00:00.000Z 15 Birds of Tokyo 2004-01-01T00:00:00.000Z 16 Bodyjar 1990-01-01T00:00:00.000Z 16 row(s) returned Executed in 1 ms
Gli Albums
tabella:
SELECT * FROM Albums;Risultato
AlbumId AlbumName ReleaseDate ArtistId GenreId ------- ------------------------ ------------------------ -------- ------- 1 Powerslave 1984-09-03T00:00:00.000Z 1 1 2 Powerage 1978-05-05T00:00:00.000Z 2 1 3 Singing Down the Lane 1956-01-01T00:00:00.000Z 6 3 4 Ziltoid the Omniscient 2007-05-21T00:00:00.000Z 5 1 5 Casualties of Cool 2014-05-14T00:00:00.000Z 5 1 6 Epicloud 2012-09-18T00:00:00.000Z 5 1 31 Somewhere in Time 1986-09-29T00:00:00.000Z 1 1 32 Piece of Mind 1983-05-16T00:00:00.000Z 1 1 33 Killers 1981-02-02T00:00:00.000Z 1 1 34 No Prayer for the Dying 1990-10-01T00:00:00.000Z 1 1 35 No Sound Without Silence 2014-09-12T00:00:00.000Z 9 4 36 Big Swing Face 1967-06-01T00:00:00.000Z 4 2 37 Blue Night 2000-11-01T00:00:00.000Z 12 4 38 Eternity 2008-10-27T00:00:00.000Z 12 4 39 Scandinavia 2012-06-11T00:00:00.000Z 12 4 40 Long Lost Suitcase 2015-10-09T00:00:00.000Z 7 4 41 Praise and Blame 2010-06-26T00:00:00.000Z 7 4 42 Along Came Jones 1965-05-21T00:00:00.000Z 7 4 43 All Night Wrong 2002-05-05T00:00:00.000Z 3 2 44 The Sixteen Men of Tain 2000-03-20T00:00:00.000Z 3 2 20 row(s) returned Executed in 1 ms
I Genres
tabella:
SELECT * FROM Genres;Risultato
GenreId Genre ------- ------- 1 Rock 2 Jazz 3 Country 4 Pop 5 Blues 6 Hip Hop 7 Rap 8 Punk 8 row(s) returned Executed in 1 ms
In tutti e tre i casi, la nostra domanda era la stessa. L'unica cosa che è cambiata è stato il nome della tabella.
Questa è una delle domande più basilari che possiamo fare. Restituisce semplicemente tutte le righe e tutte le colonne da una singola tabella.
Potremmo modificare questa query in diversi modi per restituire solo i dati che desideriamo vedere. Di seguito sono riportati alcuni modi comuni in cui possiamo modificare una query per restituire esattamente i risultati di cui abbiamo bisogno.
Specifica le colonne
Invece di usare l'asterisco (*
) per restituire tutte le colonne, puoi indicare esplicitamente solo le colonne che desideri vengano restituite.
SELECT AlbumId, AlbumName, ArtistId FROM Albums;Risultato
AlbumId AlbumName ArtistId ------- ------------------------ -------- 1 Powerslave 1 2 Powerage 2 3 Singing Down the Lane 6 4 Ziltoid the Omniscient 5 5 Casualties of Cool 5 6 Epicloud 5 31 Somewhere in Time 1 32 Piece of Mind 1 33 Killers 1 34 No Prayer for the Dying 1 35 No Sound Without Silence 9 36 Big Swing Face 4 37 Blue Night 12 38 Eternity 12 39 Scandinavia 12 40 Long Lost Suitcase 7 41 Praise and Blame 7 42 Along Came Jones 7 43 All Night Wrong 3 44 The Sixteen Men of Tain 3 20 row(s) returned Executed in 1 ms
Restringi i criteri
Puoi aggiungere un WHERE
clausola per restituire solo quelle righe che soddisfano un criterio da te fornito.
SELECT AlbumId, AlbumName, ArtistId FROM Albums WHERE ArtistId = 1;Risultato
AlbumId AlbumName ArtistId ------- ----------------------- -------- 1 Powerslave 1 31 Somewhere in Time 1 32 Piece of Mind 1 33 Killers 1 34 No Prayer for the Dying 1 5 row(s) returned Executed in 1 ms
Unisciti a un altro tavolo
È possibile utilizzare un join per restituire risultati da più tabelle che condividono dati. Questo è ciò che riguarda le relazioni. In particolare, viene generalmente utilizzato un join in cui la chiave esterna di una tabella corrisponde alla chiave primaria di un'altra.
SELECT AlbumId, AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId WHERE ReleaseDate < '1980-01-01';Risultato
AlbumId AlbumName ArtistName ------- --------------------- ---------- 2 Powerage AC/DC 3 Singing Down the Lane Jim Reeves 36 Big Swing Face Buddy Rich 42 Along Came Jones Tom Jones 4 row(s) returned Executed in 1 ms
Vedrai che il WHERE
La clausola funziona ancora su colonne che non sono effettivamente incluse nell'output. In questo caso, è stato applicato al ReleaseDate
colonna, anche se non la includiamo nei risultati.
Vedrai anche che qualifichiamo i due ArtistId
colonne con il nome della tabella (es. Albums.ArtistId
e Artists.ArtistId
). Dobbiamo farlo affinché SQL Server sappia a quale tabella ci riferiamo quando si fa riferimento a quella colonna. Alcuni sviluppatori di database considerano buona norma qualificare tutti i nomi di colonna in tutte le query SQL, tuttavia questo è più un caso di preferenza personale o convenzione di codifica specifica del progetto.
Aggiungi un alias
Puoi anche aggiungere alias di tabella alle tue query per rendere il codice più conciso. Ad esempio, potresti dare Artists
un alias di ar
e Albums
un alias di al
(o qualsiasi altra stringa che ti piace).
È possibile utilizzare questi alias per qualificare i nomi delle colonne. Ecco la stessa query di cui sopra, ma con tutti i nomi di colonna qualificati con alias di tabella:
SELECT al.AlbumId, al.AlbumName, ar.ArtistName FROM Albums al INNER JOIN Artists ar ON al.ArtistId = ar.ArtistId WHERE al.ReleaseDate < '1980-01-01';Risultato
AlbumId AlbumName ArtistName ------- --------------------- ---------- 2 Powerage AC/DC 3 Singing Down the Lane Jim Reeves 36 Big Swing Face Buddy Rich 42 Along Came Jones Tom Jones 4 row(s) returned Executed in 1 ms
Puoi anche assegnare alias alle colonne (non solo alle tabelle). Lo facciamo nel prossimo esempio.
Formatta la data
Esistono molti modi diversi per trattare date e orari nei database. In SQL Server esistono diversi tipi di dati per l'archiviazione delle date (come date
, time
, datetime
, smalldatetime
, ecc.) e ci sono molte diverse funzioni per gestire le date (ad esempio SYSDATETIME()
, GETDATE( )
, CURRENT_TIMESTAMP
, ecc).
In questo esempio useremo YEAR()
funzione per restituire solo la parte dell'anno della data.
SELECT AlbumName, YEAR(ReleaseDate) AS Year FROM Albums;Risultato
AlbumName Year ------------------------ ---- Powerslave 1984 Powerage 1978 Singing Down the Lane 1956 Ziltoid the Omniscient 2007 Casualties of Cool 2014 Epicloud 2012 Somewhere in Time 1986 Piece of Mind 1983 Killers 1981 No Prayer for the Dying 1990 No Sound Without Silence 2014 Big Swing Face 1967 Blue Night 2000 Eternity 2008 Scandinavia 2012 Long Lost Suitcase 2015 Praise and Blame 2010 Along Came Jones 1965 All Night Wrong 2002 The Sixteen Men of Tain 2000 20 row(s) returned Executed in 1 ms
In questo esempio assegniamo anche un alias a una colonna. Più precisamente, assegniamo un alias al risultato di YEAR()
funzione, di cui passiamo il ReleaseDate
colonna come argomento.
Un altro punto su questo esempio è che abbiamo usato AS
parola chiave durante l'assegnazione dell'alias. Questo è facoltativo e avremmo anche potuto usare AS
parola chiave durante l'assegnazione di un alias a una tabella nell'esempio precedente.
Informazioni su SQL e Transact-SQL
Le query precedenti (e le altre query in questo tutorial) sono scritte in Structured Query Language (SQL). Più specificamente, SQL Server utilizza Transact-SQL (a volte abbreviato in T-SQL ), che è l'estensione proprietaria di Microsoft e Sybase per SQL.
SQL è il linguaggio di query standard utilizzato nella maggior parte dei sistemi di gestione di database relazionali. È uno standard dell'American National Standards Institute (ANSI) e dell'International Organization for Standardization (ISO).
Sebbene la maggior parte delle query di base funzioni sulla maggior parte dei database relazionali, alcune query potrebbero dover essere leggermente modificate durante il porting tra un sistema di database e un altro. Ad esempio, potresti avere uno script che viene eseguito in SQL Server. Potresti anche usare quello script in MySQL, tuttavia, potresti dover modificare alcune cose prima che venga eseguito correttamente.
Gli script SQL in questo tutorial mostrano solo un piccolo esempio di cose che puoi fare con SQL. Per ulteriori informazioni, consulta il mio tutorial SQL o vai al Riferimento Microsoft Transact-SQL.