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.