Jak vytvořit dotaz v databázi SQL Server 2017.
Jeden z nejzákladnějších dotazů, které můžete udělat, zní takto:
SELECT * FROM TableName;
Tento dotaz vrací všechna data z dané tabulky. TableName
je název tabulky, kterou chcete dotazovat. Vše, co musíte udělat, je nahradit jej názvem tabulky ve vaší databázi, spustit dotaz a zobrazí se obsah této tabulky.
Naše databáze se skládá ze tří tabulek. Každá obsahuje data. Podívejme se, co je v každé tabulce.
Artists
tabulka:
SELECT * FROM Artists;Výsledek
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
tabulka:
SELECT * FROM Albums;Výsledek
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
tabulka:
SELECT * FROM Genres;Výsledek
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
Ve všech třech případech byl náš dotaz stejný. Jediná věc, která se změnila, byl název tabulky.
Toto je jeden z nejzákladnějších dotazů, které můžeme udělat. Jednoduše vrátí všechny řádky a všechny sloupce z jedné tabulky.
Tento dotaz bychom mohli upravit mnoha způsoby, abychom vrátili pouze data, která chceme vidět. Níže jsou uvedeny některé běžné způsoby, jak můžeme upravit dotaz tak, aby vrátil přesně ty výsledky, které potřebujeme.
Určete sloupce
Namísto použití hvězdičky (*
), chcete-li vrátit všechny sloupce, můžete explicitně uvést pouze ty sloupce, které chcete vrátit.
SELECT AlbumId, AlbumName, ArtistId FROM Albums;Výsledek
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
Zúžit kritéria
Můžete přidat WHERE
klauzule vrátit pouze ty řádky, které odpovídají kritériím, která jste zadali.
SELECT AlbumId, AlbumName, ArtistId FROM Albums WHERE ArtistId = 1;Výsledek
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
Připojit se k jinému stolu
Spojení můžete použít k vrácení výsledků z více tabulek, které sdílejí data. O tom jsou vztahy. Spojení se obvykle používá zejména tam, kde cizí klíč jedné tabulky odpovídá primárnímu klíči jiné tabulky.
SELECT AlbumId, AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId WHERE ReleaseDate < '1980-01-01';Výsledek
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
Uvidíte, že WHERE
klauzule stále funguje na sloupcích, které ve skutečnosti nejsou zahrnuty ve výstupu. V tomto případě bylo použito na ReleaseDate
i když tento sloupec do výsledků nezahrnujeme.
Uvidíte také, že splňujeme podmínky pro dvě ArtistId
sloupce s názvem tabulky (tj. Albums.ArtistId
a Artists.ArtistId
). Musíme to udělat, aby SQL Server věděl, na kterou tabulku odkazujeme, když odkazujeme na tento sloupec. Někteří vývojáři databází považují za dobrou praxi kvalifikovat všechny názvy sloupců ve všech dotazech SQL, ale toto je spíše případ osobních preferencí nebo konvence kódování specifické pro daný projekt.
Přidat alias
Ke svým dotazům můžete také přidat aliasy tabulek, aby byl kód stručnější. Můžete například zadat Artists
alias ar
a Albums
alias al
(nebo jakýkoli jiný řetězec, který chcete).
Tyto aliasy můžete použít ke kvalifikaci názvů sloupců. Zde je stejný dotaz jako výše, ale se všemi názvy sloupců kvalifikovanými s aliasy tabulek:
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';Výsledek
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
Můžete také přiřadit aliasy sloupcům (nejen tabulkám). Uděláme to v dalším příkladu.
Formátovat datum
Data a časy lze v databázích zpracovávat mnoha různými způsoby. V SQL Server existují různé datové typy pro ukládání dat (například date
, time
, datetime
, smalldatetime
, atd.) a existuje mnoho různých funkcí pro práci s daty (například SYSDATETIME()
, GETDATE( )
, CURRENT_TIMESTAMP
, atd.).
V tomto příkladu použijeme YEAR()
funkce vrátit pouze rok část data.
SELECT AlbumName, YEAR(ReleaseDate) AS Year FROM Albums;Výsledek
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
V tomto příkladu také přiřadíme alias ke sloupci. Konkrétněji přiřadíme alias výsledku YEAR()
funkce, které předáme ReleaseDate
sloupec jako argument.
Dalším bodem tohoto příkladu je, že jsme použili AS
klíčové slovo při přiřazování aliasu. Toto je volitelné a mohli jsme také použít AS
klíčové slovo při přiřazování aliasu k tabulce v předchozím příkladu.
O SQL a Transact-SQL
Výše uvedené dotazy (a další dotazy v tomto kurzu) jsou napsány ve strukturovaném dotazovacím jazyce (SQL). Přesněji řečeno, SQL Server používá Transact-SQL (někdy zkráceno na T-SQL ), což je proprietární rozšíření SQL společností Microsoft a Sybase.
SQL je standardní dotazovací jazyk používaný ve většině systémů pro správu relačních databází. Je to norma Amerického národního institutu pro normalizaci (ANSI) a Mezinárodní organizace pro normalizaci (ISO).
Zatímco většina základních dotazů bude fungovat ve většině relačních databází, některé dotazy bude možná nutné při portování mezi jedním databázovým systémem mírně upravit. Můžete mít například skript, který běží na serveru SQL Server. Tento skript můžete také použít v MySQL, ale možná zjistíte, že budete muset změnit několik věcí, než bude úspěšně fungovat.
Skripty SQL v tomto tutoriálu demonstrují jen malou ukázku věcí, které můžete dělat s SQL. Pro více informací se podívejte na můj SQL Tutorial nebo přejděte na Microsoft Transact-SQL Reference.