Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erstellen Sie eine Abfrage in SQL Server 2017

So erstellen Sie eine Abfrage in einer SQL Server 2017-Datenbank.

Eine der grundlegendsten Abfragen, die Sie durchführen können, lautet wie folgt:

SELECT * 
FROM TableName;

Diese Abfrage gibt alle Daten aus einer bestimmten Tabelle zurück. TableName ist der Name der Tabelle, die Sie abfragen möchten. Alles, was Sie tun müssen, ist, ihn durch den Namen einer Tabelle in Ihrer Datenbank zu ersetzen, die Abfrage auszuführen, und der Inhalt dieser Tabelle wird angezeigt.

Unsere Datenbank besteht aus drei Tabellen. Jeder enthält Daten. Mal sehen, was in jeder Tabelle steht.

Die Artists Tabelle:

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

Die Albums Tabelle:

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

Die Genres Tabelle:

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

In allen drei Fällen war unsere Anfrage dieselbe. Das einzige, was sich geändert hat, war der Tabellenname.

Dies ist eine der grundlegendsten Abfragen, die wir durchführen können. Es gibt einfach alle Zeilen und alle Spalten aus einer einzigen Tabelle zurück.

Wir könnten diese Abfrage auf verschiedene Weise ändern, um nur die Daten zurückzugeben, die wir sehen möchten. Im Folgenden finden Sie einige gängige Möglichkeiten, wie wir eine Abfrage ändern können, um genau die Ergebnisse zurückzugeben, die wir benötigen.

Spalten angeben

Anstatt das Sternchen (* ), um alle Spalten zurückzugeben, können Sie explizit nur die Spalten angeben, die zurückgegeben werden sollen.

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

Kriterien eingrenzen

Sie können ein WHERE hinzufügen -Klausel, um nur die Zeilen zurückzugeben, die einem von Ihnen angegebenen Kriterium entsprechen.

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

Nehmen Sie an einem anderen Tisch teil

Sie können einen Join verwenden, um Ergebnisse aus mehreren Tabellen zurückzugeben, die Daten gemeinsam nutzen. Darum geht es in Beziehungen. Insbesondere wird ein Join normalerweise verwendet, wenn der Fremdschlüssel einer Tabelle mit dem Primärschlüssel einer anderen übereinstimmt.

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

Sie werden sehen, dass das WHERE -Klausel funktioniert weiterhin mit Spalten, die nicht tatsächlich in der Ausgabe enthalten sind. In diesem Fall wurde es auf das ReleaseDate angewendet Spalte, obwohl wir diese Spalte nicht in die Ergebnisse aufnehmen.

Sie werden auch sehen, dass wir die beiden ArtistId qualifizieren Spalten mit dem Namen der Tabelle (z. B. Albums.ArtistId und Artists.ArtistId ). Wir müssen dies tun, damit SQL Server weiß, auf welche Tabelle wir uns beziehen, wenn wir auf diese Spalte verweisen. Einige Datenbankentwickler halten es für gute Praxis, alle Spaltennamen in allen SQL-Abfragen zu qualifizieren, jedoch ist dies eher ein Fall von persönlichen Vorlieben oder projektspezifischen Codierungskonventionen.

Alias ​​hinzufügen

Sie können Ihren Abfragen auch Tabellenaliase hinzufügen, um den Code prägnanter zu gestalten. Sie könnten zum Beispiel Artists angeben ein Alias ​​von ar und Albums ein Alias ​​von al (oder jede andere Zeichenfolge, die Sie mögen).

Sie können diese Aliase verwenden, um die Spaltennamen zu qualifizieren. Hier ist die gleiche Abfrage wie oben, aber mit allen Spaltennamen, die mit Tabellenaliasen qualifiziert sind:

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

Sie können Spalten (nicht nur Tabellen) auch Aliase zuweisen. Wir tun dies im nächsten Beispiel.

Datum formatieren

Es gibt viele verschiedene Möglichkeiten, wie Datums- und Zeitangaben in Datenbanken behandelt werden können. In SQL Server gibt es verschiedene Datentypen zum Speichern von Datumsangaben (z. B. date , time , datetime , smalldatetime , usw.) und es gibt viele verschiedene Funktionen für den Umgang mit Datumsangaben (zum Beispiel SYSDATETIME() , GETDATE( ) , CURRENT_TIMESTAMP usw.).

In diesem Beispiel verwenden wir YEAR() Funktion, um nur den Jahresteil des Datums zurückzugeben.

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

In diesem Beispiel weisen wir einer Spalte auch einen Alias ​​zu. Genauer gesagt weisen wir dem Ergebnis von YEAR() einen Alias ​​zu Funktion, von der wir das ReleaseDate übergeben Spalte als Argument.

Ein weiterer Punkt bei diesem Beispiel ist, dass wir den AS verwendet haben Schlüsselwort bei der Vergabe des Alias. Dies ist optional, und wir hätten auch den AS verwenden können Schlüsselwort beim Zuweisen eines Alias ​​zu einer Tabelle im vorherigen Beispiel.

Über SQL und Transact-SQL

Die obigen Abfragen (und die anderen Abfragen in diesem Lernprogramm) sind in SQL (Structured Query Language) geschrieben. Genauer gesagt verwendet SQL Server Transact-SQL (manchmal abgekürzt zu T-SQL ), die die proprietäre Erweiterung von Microsoft und Sybase für SQL ist.

SQL ist die Standardabfragesprache, die auf den meisten Verwaltungssystemen für relationale Datenbanken verwendet wird. Es ist ein Standard des American National Standards Institute (ANSI) und der International Organization for Standardization (ISO).

Während die meisten grundlegenden Abfragen in den meisten relationalen Datenbanken funktionieren, müssen einige Abfragen möglicherweise leicht modifiziert werden, wenn sie zwischen einem Datenbanksystem und einem anderen portiert werden. Beispielsweise haben Sie möglicherweise ein Skript, das in SQL Server ausgeführt wird. Sie könnten dieses Skript auch in MySQL verwenden, aber Sie werden möglicherweise feststellen, dass Sie einige Dinge ändern müssen, bevor es erfolgreich ausgeführt wird.

Die SQL-Skripts in diesem Lernprogramm demonstrieren nur eine kleine Auswahl von Dingen, die Sie mit SQL tun können. Weitere Informationen finden Sie in meinem SQL-Tutorial oder in der Microsoft Transact-SQL-Referenz.