sql >> Databáze >  >> RDS >> Sqlserver

Vytvořte dotaz v SQL Server 2017

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.


  1. Jak aktualizovat existující data pomocí SQLite

  2. Vytvořte DISTINCT hodnoty v STRING_AGG

  3. S sqlalchemy, jak se dynamicky vázat na databázový stroj na základě požadavku

  4. Spojte 3 tabulky v SQL