Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Créer une requête dans SQL Server 2017

Comment créer une requête dans une base de données SQL Server 2017.

L'une des requêtes les plus élémentaires que vous puissiez effectuer ressemble à ceci :

SELECT * 
FROM TableName;

Cette requête renvoie toutes les données d'une table donnée. TableName est le nom de la table que vous souhaitez interroger. Tout ce que vous avez à faire est de le remplacer par le nom d'une table de votre base de données, d'exécuter la requête et le contenu de cette table s'affichera.

Notre base de données se compose de trois tables. Chacun contient des données. Voyons ce qu'il y a dans chaque tableau.

Les Artists tableau :

SELECT * 
FROM Artists;
Result
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

Les Albums tableau :

SELECT * 
FROM Albums;
Result
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

Les Genres tableau :

SELECT * 
FROM Genres;
Résultat
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

Dans les trois cas, notre requête était la même. La seule chose qui a changé était le nom de la table.

C'est l'une des requêtes les plus élémentaires que nous puissions faire. Il renvoie simplement toutes les lignes et toutes les colonnes d'une seule table.

Nous pourrions modifier cette requête de plusieurs façons pour ne renvoyer que les données que nous souhaitons voir. Vous trouverez ci-dessous quelques façons courantes de modifier une requête pour renvoyer précisément les résultats dont nous avons besoin.

Spécifiez les colonnes

Au lieu d'utiliser l'astérisque (* ) pour renvoyer toutes les colonnes, vous pouvez indiquer explicitement uniquement les colonnes que vous souhaitez renvoyer.

SELECT AlbumId, AlbumName, ArtistId 
FROM Albums;
Result
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

Réduire les critères

Vous pouvez ajouter un WHERE clause pour renvoyer uniquement les lignes qui correspondent à un critère que vous avez fourni.

SELECT AlbumId, AlbumName, ArtistId 
FROM Albums 
WHERE ArtistId = 1;
Result
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

Rejoindre une autre table

Vous pouvez utiliser une jointure pour renvoyer les résultats de plusieurs tables qui partagent des données. C'est à cela que servent les relations. En particulier, une jointure est généralement utilisée lorsque la clé étrangère d'une table correspond à la clé primaire d'une autre.

SELECT AlbumId, AlbumName, ArtistName 
FROM Albums 
	INNER JOIN Artists 
	ON Albums.ArtistId = Artists.ArtistId 
WHERE ReleaseDate < '1980-01-01';
Result
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

Vous verrez que le WHERE La clause fonctionne toujours sur les colonnes qui ne sont pas réellement incluses dans la sortie. Dans ce cas, il a été appliqué à la ReleaseDate colonne, même si nous n'incluons pas cette colonne dans les résultats.

Vous verrez également que nous qualifions les deux ArtistId colonnes avec le nom de la table (c'est-à-dire Albums.ArtistId et Artists.ArtistId ). Nous devons le faire pour que SQL Server sache à quelle table nous nous référons lorsque nous référençons cette colonne. Certains développeurs de bases de données considèrent qu'il est recommandé de qualifier tous les noms de colonne dans toutes les requêtes SQL, mais il s'agit davantage d'un cas de préférence personnelle ou d'une convention de codage spécifique au projet.

Ajouter un alias

Vous pouvez également ajouter des alias de table à vos requêtes pour rendre le code plus concis. Par exemple, vous pourriez donner Artists un alias de ar et Albums un alias de al (ou toute autre chaîne de votre choix).

Vous pouvez utiliser ces alias pour qualifier les noms de colonne. Voici la même requête que ci-dessus, mais avec tous les noms de colonne qualifiés avec des alias de table :

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';
Result
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

Vous pouvez également attribuer des alias aux colonnes (pas seulement aux tables). Nous le faisons dans l'exemple suivant.

Formater la date

Il existe de nombreuses façons différentes de traiter les dates et les heures dans les bases de données. Dans SQL Server, il existe différents types de données pour stocker les dates (tels que date , time , datetime , smalldatetime , etc) et il existe de nombreuses fonctions différentes pour traiter les dates (par exemple SYSDATETIME() , GETDATE( ) , CURRENT_TIMESTAMP , etc.).

Dans cet exemple, nous utiliserons le YEAR() fonction pour renvoyer uniquement la partie année de la date.

SELECT AlbumName, YEAR(ReleaseDate) AS Year 
FROM Albums;
Résultat
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

Dans cet exemple, nous affectons également un alias à une colonne. Plus précisément, nous attribuons un alias au résultat du YEAR() fonction, dont on passe la ReleaseDate colonne comme argument.

Un autre point à propos de cet exemple est que nous avons utilisé le AS mot-clé lors de l'attribution de l'alias. Ceci est facultatif, et nous aurions également pu utiliser le AS mot-clé lors de l'attribution d'un alias à une table dans l'exemple précédent.

À propos de SQL et de Transact-SQL

Les requêtes ci-dessus (et les autres requêtes de ce didacticiel) sont écrites en langage de requête structuré (SQL). Plus précisément, SQL Server utilise Transact-SQL (parfois abrégé en T-SQL ), qui est l'extension propriétaire de Microsoft et Sybase pour SQL.

SQL est le langage de requête standard utilisé sur la plupart des systèmes de gestion de bases de données relationnelles. C'est une norme de l'American National Standards Institute (ANSI) et de l'Organisation internationale de normalisation (ISO).

Bien que la plupart des requêtes de base fonctionnent sur la plupart des bases de données relationnelles, certaines requêtes peuvent devoir être légèrement modifiées lors du transfert entre un système de base de données et un autre. Par exemple, vous pouvez avoir un script qui s'exécute dans SQL Server. Vous pouvez également utiliser ce script dans MySQL, mais vous devrez peut-être modifier quelques éléments avant qu'il ne s'exécute correctement.

Les scripts SQL de ce didacticiel ne présentent qu'un petit échantillon de ce que vous pouvez faire avec SQL. Pour plus d'informations, consultez mon didacticiel SQL ou accédez à la référence Microsoft Transact-SQL.