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

Opret en forespørgsel i SQL Server 2017

Sådan opretter du en forespørgsel i en SQL Server 2017-database.

En af de mest grundlæggende forespørgsler, du kan gøre, går sådan her:

SELECT * 
FROM TableName;

Denne forespørgsel returnerer alle data fra en given tabel. TableName er navnet på den tabel, du vil forespørge på. Alt du skal gøre er at erstatte det med navnet på en tabel i din database, køre forespørgslen, og indholdet af den tabel vil blive vist.

Vores database består af tre tabeller. Hver indeholder data. Lad os se, hvad der er i hver tabel.

Artists tabel:

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

Albums tabel:

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

Genres tabel:

SELECT * 
FROM Genres;
Resultat
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

I alle tre tilfælde var vores forespørgsel den samme. Det eneste, der ændrede sig, var tabelnavnet.

Dette er en af ​​de mest grundlæggende forespørgsler, vi kan gøre. Det returnerer simpelthen alle rækker og alle kolonner fra en enkelt tabel.

Vi kunne ændre denne forespørgsel på en række måder for kun at returnere de data, vi ønsker at se. Nedenfor er nogle almindelige måder, hvorpå vi kan ændre en forespørgsel for at returnere præcis de resultater, vi har brug for.

Angiv kolonnerne

I stedet for at bruge stjernen (* ) for at returnere alle kolonner, kan du udtrykkeligt kun angive de kolonner, du ønsker skal returneres.

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

Begræns kriterierne

Du kan tilføje en WHERE klausul for kun at returnere de rækker, der matcher et kriterium angivet af dig.

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

Tilslut dig et andet bord

Du kan bruge en joinforbindelse til at returnere resultater fra flere tabeller, der deler data. Det er, hvad relationer handler om. Især bruges en join typisk, hvor fremmednøglen i en tabel matcher den primære nøgle i en anden.

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

Du vil se, at WHERE klausul fungerer stadig på kolonner, der faktisk ikke er inkluderet i outputtet. I dette tilfælde blev det anvendt på ReleaseDate kolonne, selvom vi ikke inkluderer den kolonne i resultaterne.

Du vil også se, at vi kvalificerer de to ArtistId kolonner med navnet på tabellen (dvs. Albums.ArtistId og Artists.ArtistId ). Vi skal gøre dette, for at SQL Server kan vide, hvilken tabel vi henviser til, når vi refererer til den kolonne. Nogle databaseudviklere anser det for god praksis at kvalificere alle kolonnenavne i alle SQL-forespørgsler, men dette er mere et tilfælde af personlig præference eller projektspecifik kodningskonvention.

Tilføj et alias

Du kan også tilføje tabelaliasser til dine forespørgsler for at gøre koden mere kortfattet. For eksempel kunne du give Artists et alias for ar og Albums et alias for al (eller enhver anden streng, du kan lide).

Du kan bruge disse aliaser til at kvalificere kolonnenavnene. Her er den samme forespørgsel som ovenfor, men med alle kolonnenavne kvalificeret med tabelaliasser:

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

Du kan også tildele aliaser til kolonner (ikke kun tabeller). Det gør vi i det næste eksempel.

Formatér datoen

Der er mange forskellige måder, hvorpå datoer og tidspunkter kan behandles i databaser. I SQL Server er der forskellige datatyper til lagring af datoer (såsom date , time , datetime , smalldatetime osv.), og der er mange forskellige funktioner til håndtering af datoer (f.eks. SYSDATETIME() , GETDATE( ) , CURRENT_TIMESTAMP osv.).

I dette eksempel bruger vi YEAR() funktion for kun at returnere årsdelen af ​​datoen.

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

I dette eksempel tildeler vi også et alias til en kolonne. Mere specifikt tildeler vi et alias til resultatet af YEAR() funktion, hvoraf vi sender ReleaseDate kolonne som argument.

Et andet punkt ved dette eksempel er, at vi brugte AS nøgleord, når du tildeler aliaset. Dette er valgfrit, og vi kunne også have brugt AS nøgleord, når du tildeler et alias til en tabel i det foregående eksempel.

Om SQL og Transact-SQL

Ovenstående forespørgsler (og de andre forespørgsler i denne øvelse) er skrevet i Structured Query Language (SQL). Mere specifikt bruger SQL Server Transact-SQL (nogle gange forkortet til T-SQL ), som er Microsofts og Sybases proprietære udvidelse til SQL.

SQL er standardforespørgselssproget, der bruges på de fleste relationelle databasestyringssystemer. Det er en standard fra American National Standards Institute (ANSI) og fra International Organization for Standardization (ISO).

Mens de fleste basale forespørgsler fungerer på tværs af de fleste relationelle databaser, skal nogle forespørgsler muligvis ændres en smule, når de overføres mellem et databasesystem og et andet. For eksempel kan du have et script, der kører i SQL Server. Du kan også bruge det script i MySQL, men du vil måske opdage, at du skal ændre et par ting, før det kører med succes.

SQL-scripts i denne øvelse viser blot et lille udsnit af ting, du kan gøre med SQL. For mere information, tjek mit SQL-tutorial eller gå til Microsoft Transact-SQL-referencen.


  1. Forening af to tabeller med forskelligt antal kolonner

  2. MariaDB JSON_SET() Forklaret

  3. Introduktion til Oracle RMAN

  4. Forståelse af 'tids'-lagerstørrelse i SQL Server