Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Creare una query in SQL Server 2017

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.