Die SELECT
-Anweisung ist ohne Zweifel die am häufigsten verwendete Anweisung in SQL.
Die SELECT
-Anweisung wird zum Abrufen von Daten aus der Datenbank verwendet. Sie können angeben, welche Zeilen Sie zurückgeben möchten und welche Spalten.
Beispiel
Hier ist ein Beispiel, um den SELECT
zu demonstrieren Aussage.
SELECT *
FROM Pets;
Ergebnis:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
In diesem Beispiel haben wir das Sternchen (*
) Platzhalter, um alle Spalten zurückzugeben. Wir haben auch den FROM
verwendet -Klausel, um anzugeben, aus welcher Tabelle Daten abgerufen werden sollen.
Diese Abfrage gibt also alle Zeilen und alle Spalten aus Pets
zurück Tabelle.
Spalten angeben
Sie können die Spalten angeben, die Sie zurückgeben möchten.
Ersetzen Sie dazu das Sternchen als Platzhalter durch die Spaltennamen, die jeweils durch ein Komma getrennt sind, in der Reihenfolge, in der sie zurückgegeben werden sollen.
SELECT PetId, PetName, DOB
FROM Pets;
Ergebnis:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 2 | Fetch | 2019-08-16 | | 3 | Scratch | 2018-10-01 | | 4 | Wag | 2020-03-15 | | 5 | Tweet | 2020-11-28 | | 6 | Fluffy | 2020-09-17 | | 7 | Bark | NULL | | 8 | Meow | NULL | +---------+-----------+------------+
Es wird im Allgemeinen als bewährte Vorgehensweise angesehen, dies auf diese Weise zu tun und nur die Spalten zurückzugeben, die Sie tatsächlich benötigen. Die Verwendung des Sternchen-Platzhalters zum Zurückgeben aller Spalten kann sich negativ auf die Leistung auswirken, insbesondere in größeren Datenbanken.
Spezifizieren Sie die Zeilen
Es gibt viele Möglichkeiten, die Ergebnisse auf die Zeilen zu filtern, die Sie interessieren. Die gebräuchlichste Methode ist die Verwendung von WHERE
Klausel. Mit dieser Klausel können Sie eine Bedingung angeben, die eine Zeile erfüllen muss, um sich zu qualifizieren.
Hier ist ein Beispiel zur Veranschaulichung.
SELECT PetId, PetName, DOB
FROM Pets
WHERE PetName = 'Fluffy';
Ergebnis:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 6 | Fluffy | 2020-09-17 | +---------+-----------+------------+
In unserem Fall gab es zwei Zeilen, die unsere Suchbedingung erfüllten.
Unsere Suchbedingung verwendet den Gleichheitsoperator (=
), um anzugeben, dass der Wert von PetName
Spalte muss mit dem angegebenen Wert übereinstimmen (Fluffy
) genau.
Es gibt viele andere Operatoren, die Sie in Ihren Suchbedingungen verwenden können. Zum Beispiel könnten Sie den LIKE
verwenden Operator, um Haustiere zurückzugeben, deren Name mit F
beginnt oder Fluff
oder Wasauchimmer.
Sie können dem WHERE
weitere Bedingungen hinzufügen -Klausel, indem Sie Operatoren wie AND
verwenden und OR
Betreiber.
Hier ist ein Beispiel.
SELECT PetId, PetName, DOB
FROM Pets
WHERE PetName = 'Fluffy'
OR DOB < '2020-01-01';
Ergebnis:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 2 | Fetch | 2019-08-16 | | 3 | Scratch | 2018-10-01 | | 6 | Fluffy | 2020-09-17 | +---------+-----------+------------+
In diesem Beispiel haben wir alle Zeilen zurückgegeben, in denen der Name des Haustiers Fluffy oder ist wo das Geburtsdatum des Haustieres (angegeben im DOB
Spalte) ist kleiner als ein bestimmtes Datum. Wir haben den Kleiner-als-Operator (<
), um das anzugeben.
Nicht-Tabellendaten zurückgeben
Die SELECT
-Anweisung kann auch verwendet werden, um Daten zurückzugeben, die nicht in einer Tabelle gespeichert sind. Zum Beispiel ist es vollkommen legal, dies zu tun:
SELECT 'Hey there!';
Ergebnis:
+--------------------+ | (No column name) | |--------------------| | Hey there! | +--------------------+
Beachten Sie, dass die Spalte dabei keinen Namen hat. Wir könnten einen Alias verwenden, um dem resultierenden Feld einen Namen zu geben.
Hier sind ein paar weitere Beispiele für die Auswahl von Nicht-Tabellendaten und die Bereitstellung eines Alias für jedes zurückgegebene Feld:
SELECT
2 + 3 AS "2 + 3",
'Fluffy' + ' ' + 'Smith' AS FullName,
SYSDATETIME() AS "Date/time";
Ergebnis:
+---------+--------------+-----------------------------+ | 2 + 3 | FullName | Date/time | |---------+--------------+-----------------------------| | 5 | Fluffy Smith | 2020-12-04 23:58:55.8483734 | +---------+--------------+-----------------------------+
Hier ist ein kurzer Überblick:
- In der ersten Spalte wurden einfach zwei Zahlen hinzugefügt.
- Die zweite Spalte verkettete drei Zeichenfolgen (einschließlich eines Leerzeichens). Sie können bei Bedarf auch Zeichenfolgen mit Zahlen verketten.
- Die dritte Spalte verwendete
SYSDATETIME()
Funktion, um das aktuelle Datum und die Uhrzeit zurückzugeben. Diese Funktion ist in SQL Server verfügbar. Andere DBMSs haben ihre eigenen Datums- und Zeitfunktionen. Siehe SQLite-Datums-/Zeitfunktionen, SQL Server-Datums-/Zeitfunktionen und PostgreSQL-Datums-/Zeitfunktionen für eine Liste der in diesen DBMS verfügbaren Datums- und Zeitfunktionen.
Unterabfragen
Es ist möglich, mehrere SELECT
zu haben Anweisungen in einer einzigen Abfrage. Wir können dies mit einer Unterabfrage tun.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Ergebnis:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
In diesem Beispiel haben wir den IN
verwendet -Operator zur Angabe einer Unterabfrage. Diese Unterabfrage wählte Daten aus einer anderen Tabelle und den IN
aus Operator hat es auf die äußere Abfrage zurückgeführt.
Ordnen der Ergebnisse
Sie können den ORDER BY
verwenden -Klausel zum Sortieren der Ergebnisse.
Beispielsweise könnten wir die vorherigen Ergebnisse nach PetTypeId
sortieren Spalte in absteigender Reihenfolge:
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets )
ORDER BY PetTypeId DESC;
Ergebnis:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 3 | Dog | | 2 | Cat | | 1 | Bird | +-------------+-----------+
Siehe SQL ORDER BY
Abschnitt für Anfänger für weitere Beispiele und eine detaillierte Erklärung.
Erweitert SELECT
Aussagen
Die SELECT
-Anweisung ist eine sehr einfache Anweisung, die jedoch zum Erstellen sehr komplexer Abfragen verwendet werden kann.
Hier ist eine Abfrage, die etwas komplexer ist als die vorherigen.
SELECT
PetTypes.PetType,
COUNT(Pets.PetTypeId) AS Count
FROM Pets
LEFT JOIN PetTypes
ON Pets.PetTypeId = PetTypes.PetTypeId
GROUP BY PetTypes.PetType
ORDER BY Count DESC;
Ergebnis:
+-----------+---------+ | PetType | Count | |-----------+---------| | Dog | 4 | | Cat | 3 | | Bird | 1 | +-----------+---------+
In der Welt der SQL-Abfragen ist dies immer noch ziemlich einfach, enthält jedoch viele der Elemente, die häufig in komplexeren Abfragen vorkommen.
Diese Abfrage verwendet beispielsweise einen Join, um Daten aus mehreren Tabellen abzurufen. Es verwendet auch den GROUP BY
-Klausel, um die Zeilen in Gruppen zu unterteilen.
Siehe SQL GROUP BY
Klausel für Anfänger für weitere Beispiele von GROUP BY
Klausel.
Sehen Sie sich das SQL Joins Tutorial an, um zu sehen, wie Sie Daten aus mehreren Tabellen abrufen und sie als eine Ergebnismenge zurückgeben.
Der SELECT INTO
Erklärung
Einige DBMS unterstützen den SELECT INTO
Erklärung. Dies unterscheidet sich geringfügig von den vorherigen Beispielen, da es sich auf die Daten in der Datenbank auswirkt.
Der SELECT INTO
-Anweisung erstellt eine neue Tabelle und fügt Daten aus einer anderen Tabelle ein.
Im Grunde geht das so:
SELECT * INTO Table2
FROM Table1;
In diesem Beispiel erstellen wir eine neue Tabelle namens Table2
, und fügen Sie alle Daten aus Table1
ein hinein. Table2
hat die gleiche Definition wie Table1
.
Siehe SQL SELECT INTO
Statement für weitere Beispiele.
Wie ich bereits angedeutet habe, unterstützen nicht alle DBMS diese Aussage. Wenn Ihr DBMS den SELECT INTO
nicht unterstützt -Anweisung, versuchen Sie es mit CREATE TABLE ... AS SELECT
Aussage statt.
Diese Anweisungen erstellen als Teil ihrer Operation eine neue Tabelle. Um Daten in eine bereits vorhandene Tabelle einzufügen, versuchen Sie es mit INSERT INTO ... SELECT
Aussage statt.