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.