SELECT¶
SELECT kann entweder als Anweisung oder als Klausel innerhalb anderer Anweisungen verwendet werden:
Die SELECT-Anweisung ist die am häufigsten ausgeführte SQL-Anweisung. Sie fragt die Datenbank ab und ruft eine Menge von Zeilen ab.
Als Klausel definiert SELECT die von einer Abfrage zurückgegebene Menge von Spalten.
- Siehe auch:
Syntax¶
In den folgenden Abschnitten wird die Syntax dieses Befehls beschrieben:
Auswählen aller Spalten¶
Sie können nach SELECT * die folgenden Kombinationen von Schlüsselwörtern angeben. Die Schlüsselwörter müssen in der unten angegebene Reihenfolge sein:
Auswählen bestimmter Spalten¶
Ein nachstehendes Komma wird in einer Spaltenliste unterstützt. Beispielsweise wird folgende SELECT-Anweisung unterstützt:
Weitere Informationen zu SELECT als Anweisung und zu den anderen Klauseln in dieser Anweisung finden Sie unter Abfragesyntax.
Parameter¶
ALL | DISTINCTGibt an, ob im Resultset Duplikate entfernt werden sollen:
ALLschließt alle Werte in das Resultset ein.DISTINCTentfernt doppelte Werte aus dem Resultset.
Standard:
ALLTOP nGibt die maximale Anzahl der zurückzugebenden Ergebnisse an. Siehe TOP <n>.
object_nameoder .aliasGibt den Objektbezeichner oder den Objektalias an, wie in der FROM-Klausel definiert.
*Das Sternchen ist eine Abkürzung, um anzugeben, dass die Ausgabe alle Spalten des angegebenen Objekts oder alle Spalten aller Objekte enthalten soll, wenn
*nicht mit einem Objektnamen oder Alias qualifiziert ist. Die Spalten werden in der Reihenfolge zurückgegeben, die durch Ausführen des Befehls DESCRIBE auf dem Objekt angezeigt wird.Wenn Sie
*angeben, können Sie auchILIKE,EXCLUDE,REPLACEundRENAMEangeben:ILIKE 'pattern'Gibt an, dass nur die Spalten, die mit
patternübereinstimmen, in den Ergebnissen enthalten sein sollen.In
patternkönnen Sie die folgenden SQL-Platzhalter verwenden:Verwenden Sie einen Unterstrich (
_), um eine Übereinstimmung mit einem beliebigen einzelnen Zeichen anzugeben.Verwenden Sie ein Prozentzeichen (
%), um eine Übereinstimmung mit einer beliebigen Sequenz von null oder mehr Zeichen anzugeben.
Um eine Übereinstimmung mit einer Sequenz an einer bestimmten Stelle in einer Zeichenfolge anzugeben, beginnen und beenden Sie das Muster mit
%.Beim Abgleichen wird nicht zwischen Groß- und Kleinschreibung unterschieden.
Wenn keine Spalten mit dem angegebenen Muster übereinstimmen, tritt ein Kompilierungsfehler auf (
001080 (42601): ... SELECT with no columns).EXCLUDE col_name.EXCLUDE (col_name, col_name, ...)Gibt die Spalten an, die von den Ergebnissen ausgeschlossen werden sollen.
Wenn Sie eine Auswahl aus mehreren Tabellen vornehmen, verwenden Sie
SELECT table_name.*, um anzugeben, dass Sie alle Spalten einer bestimmten Tabelle auswählen möchten. Den nicht qualifizierten Spaltennamen geben Sie dann inEXCLUDEan. Beispiel:REPLACE (expr AS col_name [ , expr AS col_name, ...] )Ersetzt den Wert von
col_namedurch den Wert des ausgewerteten Ausdrucksexpr.Um beispielsweise die Zeichenfolge
'DEPT-'den Werten in der Spaltedepartment_idvoranzustellen, verwenden Sie:col_name:Die Spalte muss existieren und kann nicht durch
ILIKEoderEXCEPTherausgefiltert werden.Sie können die gleiche Spalte nicht mehrmals in der Liste der Ersetzungen angeben.
Wenn die Spalte in mehreren Tabellen enthalten ist (z. B. in beiden Tabellen einer Verknüpfung), schlägt die Anweisung mit einem „ambiguous column“-Fehler (mehrdeutige Spalte) fehl.
exprmuss einen einzelnen Wert ergeben.RENAME col_name AS col_alias.RENAME (col_name AS col_alias, col_name AS col_alias, ...)Gibt die Spalten-Aliasse an, die in den Ergebnissen verwendet werden sollen.
Wenn Sie eine Auswahl aus mehreren Tabellen vornehmen, verwenden Sie
SELECT table_name.*, um anzugeben, dass Sie alle Spalten einer bestimmten Tabelle auswählen möchten. Den nicht qualifizierten Spaltennamen geben Sie dann inRENAMEan. Beispiel:
Bemerkung
Wenn Sie nach
SELECT *eine Kombination von Schlüsselwörtern angeben:Sie können nicht gleichzeitig
ILIKEundEXCLUDEangeben.Wenn Sie
EXCLUDEmitRENAMEoderREPLACEangeben:Sie müssen
EXCLUDEvorRENAMEoderREPLACEangegeben:Es kann nicht die gleiche Spalte in
EXCLUDEundRENAMEangegeben werden.
Wenn Sie
ILIKEmitRENAMEoderREPLACEangeben, müssen Sie zuerstILIKEangeben:Wenn Sie
REPLACEundRENAMEangeben:Sie müssen zuerst
REPLACEangegeben:Sie können denselben Spaltennamen in
REPLACEund inRENAMEangeben:
col_nameGibt den Spaltenbezeichner an, wie in der FROM-Klausel definiert.
$col_positionGibt die Position der Spalte (1-basiert) an, wie in der FROM-Klausel definiert. Wenn eine Spalte aus einer Tabelle referenziert wird, darf diese Anzahl die maximale Anzahl von Spalten in der Tabelle nicht überschreiten.
exprGibt einen Ausdruck an, beispielsweise einen mathematischen Ausdruck, der für eine bestimmte Zeile einen bestimmten Wert ergibt.
[ AS ] col_aliasGibt den Spaltenalias an, der dem resultierenden Ausdruck zugewiesen ist. Dieser wird als Anzeigename in einer SELECT-Liste der obersten Ebene und als Spaltenname in einer Inline-Ansicht verwendet.
Weisen Sie keinen Spaltenalias zu, der mit dem Namen einer anderen Spalte, auf die in der Abfrage verwiesen wird, identisch ist. Wenn Sie beispielsweise Spalten mit den Namen
prod_idundproduct_idauswählen, dürfen Sie fürprod_idnicht den Aliasproduct_idverwenden. Siehe Fehlerfall: Angeben eines Alias, der mit einem anderen Spaltennamen übereinstimmt.
Nutzungshinweise¶
Aliasnamen und Bezeichner unterscheiden standardmäßig nicht zwischen Groß- und Kleinschreibung. Um die Groß-/Kleinschreibung zu erhalten, schließen Sie diese in Anführungszeichen (
") ein. Weitere Informationen dazu finden Sie unter Objektbezeichner.Ohne eine ORDER BY-Klausel sind die von SELECT zurückgegebenen Ergebnisse eine ungeordnete Menge. Wenn Sie die gleiche Abfrage wiederholt für dieselben Tabellen ausführen, kann dies jedes Mal zu einer anderen Ausgabereihenfolge führen. Wenn die Reihenfolge von Belang ist, verwenden Sie die
ORDER BY-Klausel.SELECT kann nicht nur als unabhängige Anweisung verwendet werden, sondern auch als Klausel in anderen Anweisungen, z. B.
INSERT INTO ... SELECT ...;. SELECT kann auch in einer Unterabfrage innerhalb einer Anweisung verwendet werden.Wenn Sie einen Spaltenalias für einen Ausdruck (z. B.
expr AS col_alias) in anderen Teilen derselben Abfrage (in JOIN, FROM, WHERE, GROUP BY, anderen Spaltenausdrücken usw.) verwenden, wird der Ausdruck in vielen Fällen nur einmal ausgewertet.Beachten Sie jedoch, dass der Ausdruck in einigen Fällen mehrfach ausgewertet werden kann, was zu unterschiedlichen Werten für den in verschiedenen Teilen derselben Abfrage verwendeten Alias führen kann.
Beispiele¶
Nachfolgend finden Sie ein paar einfache Beispiele.
Viele Beispiele sind in anderen Teilen der Dokumentation enthalten, einschließlich der detaillierten Beschreibung von Abfragesyntax.
Beispiele für das Abfragen einer Ereignistabelle (deren Schema von Snowflake vordefiniert ist) finden Sie unter Anzeigen von Protokollmeldungen und Ablaufverfolgung anzeigen.
Einrichten der Daten für die Beispiele¶
Einige der Abfragen unten verwenden folgende Tabellen und Daten:
Beispiele für das Auswählen aller Spalten (SELECT *)¶
Auswählen aller Spalten mit Namen, die mit einem Muster übereinstimmen
Auswählen aller Spalten mit Namen, die mit einem Muster übereinstimmen, und Umbenennen einer Spalte
Auswählen aller Spalten, Ausschließen einer Spalte und Umbenennen mehrerer Spalten
Auswählen aller Spalten, Ersetzen des Werts einer Spalte und Umbenennen der Spalte
Auswählen aller Spalten aus mehreren Tabellen, Ausschließen einer Spalte und Umbenennen einer Spalte
Auswählen aller Spalten in der Tabelle¶
In diesem Beispiel wird gezeigt, wie alle Spalten in employee_table auswählt werden:
Auswählen aller Spalten mit Namen, die mit einem Muster übereinstimmen¶
In diesem Beispiel wird gezeigt, wie Sie alle Spalten in employee_table auswählen, deren Namen id enthalten:
Auswählen aller Spalten bis auf eine Spalte¶
In diesem Beispiel wird gezeigt, wie alle Spalten in employee_table mit Ausnahme der Spalte department_id ausgewählt werden:
Auswählen aller Spalten bis auf zwei oder mehr Spalten¶
In diesem Beispiel wird gezeigt, wie Sie alle Spalten in employee_table mit Ausnahme der Spalten department_id und employee_id auswählen:
Auswählen aller Spalten und Umbenennen einer Spalte¶
In diesem Beispiel wird gezeigt, wie Sie alle Spalten in employee_table auswählen und die Spalte department_id umbenennen:
Auswählen aller Spalten und Umbenennen mehrerer Spalten¶
In diesem Beispiel wird gezeigt, wie Sie alle Spalten in employee_table auswählen und die Spalten department_id und employee_id umbenennen:
Auswählen aller Spalten, Ausschließen einer Spalte und Umbenennen mehrerer Spalten¶
In diesem Beispiel wird gezeigt, wie Sie alle Spalten in employee_table auswählen, die Spalte first_name aber ausschließen und die Spalten department_id und employee_id umbenennen:
Auswählen aller Spalten mit Namen, die mit einem Muster übereinstimmen, und Umbenennen einer Spalte¶
In diesem Beispiel wird gezeigt, wie Sie alle Spalten in employee_table auswählen, deren Namen id enthalten, und wie Sie die Spalte department_id umbenennen:
Auswählen aller Spalten und Ersetzen des Werts einer Spalte¶
Dieses Beispiel zeigt, wie Sie alle Spalten in employee_table auswählen und den Wert in der Spalte department_id durch den Wert ID mit vorangestelltem DEPT- ersetzen:
Auswählen aller Spalten, Ersetzen des Werts einer Spalte und Umbenennen der Spalte¶
Dieses Beispiel zeigt, wie Sie alle Spalten in employee_table auswählen, den Wert in der Spalte department_id durch den Wert ID mit vorangestelltem DEPT- ersetzen und die Spalte umbenennen:
Auswählen aller Spalten mit Namen, die mit einem Muster übereinstimmen, und Ersetzen des Wertes in einer Spalte¶
Dieses Beispiel zeigt, wie Sie alle Spalten in employee_table auswählen, deren Namen id enthalten, und wie Sie den Werten in der Spalte department_id die Zeichenfolge DEPT- voranstellen:
Auswählen aller Spalten aus mehreren Tabellen, Ausschließen einer Spalte und Umbenennen einer Spalte¶
In diesem Beispiel werden zwei Tabellen verknüpft und alle Spalten aus beiden Tabellen ausgewählt, bis auf eine Spalte aus employee_table. Im Beispiel wird auch eine der aus department_table ausgewählten Spalten umbenannt.
Beispiele für das Auswählen bestimmter Spalten (SELECT <Spaltenname>)¶
Auswählen mehrerer Spalten nach Namen aus verknüpften Tabellen
Fehlerfall: Angeben eines Alias, der mit einem anderen Spaltennamen übereinstimmt
Auswählen einer einzelnen Spalte nach Name¶
Dieses Beispiel zeigt, wie Sie nach dem Nachnamen eines Mitarbeiters suchen können, wenn Sie die ID kennen.
Auswählen mehrerer Spalten nach Namen aus verknüpften Tabellen¶
In diesem Beispiel werden alle Mitarbeiter mit dem Namen der Abteilung aufgelistet, in der sie tätig sind. Die Reihenfolge bei der Ausgabe erfolgt nach Abteilungsnamen, und innerhalb der einzelnen Abteilung nach Namen der Mitarbeiter. Diese Abfrage verwendet eine Verknüpfung (Join), um die Informationen einer Tabelle mit den Informationen einer anderen Tabelle zu verknüpfen.
Auswählen einer Spalte nach Position¶
Dieses Beispiel zeigt, wie Sie mithilfe von $ eine Spalte statt über den Spaltennamen mit der Spaltennummer identifizieren:
Angeben eines Alias für eine Spalte in der Ausgabe¶
Dieses Beispiel zeigt, dass die Ausgabespalten nicht direkt aus den Tabellen in der FROM-Klausel entnommen werden müssen. Die Ausgabespalten können allgemeine Ausdrücke sein. Dieses Beispiel berechnet die Fläche eines Kreises mit dem Radius 2.0. Dieses Beispiel zeigt auch, wie Sie einen Spaltenalias verwenden, damit die Ausgabe einen aussagekräftigen Spaltennamen hat:
Fehlerfall: Angeben eines Alias, der mit einem anderen Spaltennamen übereinstimmt¶
Dieses Beispiel zeigt, warum es nicht empfehlenswert ist, einen Spaltenalias zu verwenden, der mit dem Namen einer anderen in der Abfrage verwendeten Spalte übereinstimmt. Diese GROUP BY-Abfrage führt zu einem SQL-Compilerfehler, nicht zu einem Fehler aufgrund von mehrdeutigen Spalten. Der Alias prod_id, der product_id in table1 zugewiesen wird, entspricht dem Namen der Spalte prod_id in table2. Die einfachste Lösung für diesen Fehler besteht darin, der Spalte einen anderen Alias zu geben.