sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa en fråga i SQL Server 2017

Hur man skapar en fråga i en SQL Server 2017-databas.

En av de mest grundläggande frågorna du kan göra är så här:

SELECT * 
FROM TableName;

Denna fråga returnerar all data från en given tabell. TableName är namnet på tabellen du vill fråga. Allt du behöver göra är att ersätta den med namnet på en tabell i din databas, köra frågan och innehållet i den tabellen kommer att visas.

Vår databas består av tre tabeller. Var och en innehåller data. Låt oss se vad som finns i varje tabell.

Artists tabell:

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 tabell:

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 tabell:

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 alla tre fallen var vår fråga densamma. Det enda som ändrades var tabellnamnet.

Detta är en av de mest grundläggande frågorna vi kan göra. Det returnerar helt enkelt alla rader och alla kolumner från en enda tabell.

Vi skulle kunna modifiera den här frågan på ett antal sätt för att bara returnera den information som vi vill se. Nedan finns några vanliga sätt vi kan modifiera en fråga för att ge exakt de resultat vi behöver.

Ange kolumnerna

Istället för att använda asterisken (* ) för att returnera alla kolumner kan du uttryckligen endast ange de kolumner som du vill ska returneras.

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änsa kriterierna

Du kan lägga till en WHERE klausul för att endast returnera de rader som matchar ett kriterium som du tillhandahållit.

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

Gå med i ett annat bord

Du kan använda en koppling för att returnera resultat från flera tabeller som delar data. Det är vad relationer handlar om. I synnerhet används vanligtvis en join där den främmande nyckeln för en tabell matchar primärnyckeln för en annan.

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 ser att WHERE klausul fungerar fortfarande på kolumner som faktiskt inte ingår i utdata. I det här fallet tillämpades den på ReleaseDate kolumn, även om vi inte inkluderar den kolumnen i resultaten.

Du kommer också att se att vi kvalificerar de två ArtistId kolumner med namnet på tabellen (dvs. Albums.ArtistId och Artists.ArtistId ). Vi måste göra detta för att SQL Server ska veta vilken tabell vi hänvisar till när vi refererar till den kolumnen. Vissa databasutvecklare anser att det är god praxis att kvalificera alla kolumnnamn i alla SQL-frågor, men detta är mer ett fall av personliga preferenser eller projektspecifik kodningskonvention.

Lägg till ett alias

Du kan också lägga till tabellalias till dina frågor för att göra koden mer kortfattad. Till exempel kan du ge Artists ett alias för ar och Albums ett alias för al (eller någon annan sträng du gillar).

Du kan använda dessa alias för att kvalificera kolumnnamnen. Här är samma fråga som ovan, men med alla kolumnnamn kvalificerade med tabellalias:

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 också tilldela alias till kolumner (inte bara tabeller). Vi gör detta i nästa exempel.

Formatera datumet

Det finns många olika sätt som datum och tider kan behandlas i databaser. I SQL Server finns det olika datatyper för att lagra datum (som date). , time , datetime , smalldatetime , etc) och det finns många olika funktioner för att hantera datum (till exempel SYSDATETIME() , GETDATE( ) , CURRENT_TIMESTAMP osv.).

I det här exemplet använder vi YEAR() funktion för att returnera bara årsdelen av datumet.

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 det här exemplet tilldelar vi också ett alias till en kolumn. Mer specifikt tilldelar vi resultatet av YEAR() ett alias funktion, varav vi skickar ReleaseDate kolumn som argument.

En annan sak med det här exemplet är att vi använde AS nyckelord när du tilldelar aliaset. Detta är valfritt, och vi kunde också ha använt AS nyckelord när du tilldelar ett alias till en tabell i föregående exempel.

Om SQL och Transact-SQL

Ovanstående frågor (och de andra frågorna i denna handledning) är skrivna i Structured Query Language (SQL). Mer specifikt använder SQL Server Transact-SQL (ibland förkortad till T-SQL ), som är Microsofts och Sybases egenutvecklade tillägg till SQL.

SQL är standardfrågespråket som används i de flesta relationsdatabashanteringssystem. Det är en standard från American National Standards Institute (ANSI) och från International Organization for Standardization (ISO).

Medan de flesta grundläggande frågor fungerar i de flesta relationsdatabaser, kan vissa frågor behöva modifieras något vid portering mellan ett databassystem och ett annat. Till exempel kan du ha ett skript som körs i SQL Server. Du kan också använda det skriptet i MySQL, men du kanske upptäcker att du behöver ändra några saker innan det körs framgångsrikt.

SQL-skripten i denna handledning visar bara ett litet urval av saker du kan göra med SQL. För mer information kolla in min SQL Tutorial eller gå till Microsoft Transact-SQL Reference.


  1. PostgreSQL-array av element som var och en är en främmande nyckel

  2. Oracle Date - Hur man lägger till år till datum

  3. Hur fastighetsförvaltare kan förbättra effektiviteten med en databas

  4. RMAN Lista backup-kommandon