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¶
[ ... ]
SELECT [ { ALL | DISTINCT } ]
[ TOP <n> ]
{
-- Selecting all columns.
[{<object_name>|<alias>}.]*
[ EXCLUDE
{
<col_name>
| ( <col_name>, <col_name>, ... )
}
]
[ RENAME
{
<col_name> AS <col_alias>
| ( <col_name> AS <col_alias>, <col_name> AS <col_alias>, ... )
}
]
|
-- Selecting specific columns.
{
[{<object_name>|<alias>}.]<col_name>
| [{<object_name>|<alias>}.]$<col_position>
| <expr>
}
[ [ AS ] <col_alias> ]
}
[ , ... ]
[ ... ]
Weitere Informationen zu SELECT als Anweisung und zu den anderen Klauseln in dieser Anweisung finden Sie unter Abfragesyntax.
Parameter¶
ALL | DISTINCT
Gibt an, ob im Resultset Duplikate entfernt werden sollen:
ALL
schließt alle Werte in das Resultset ein.DISTINCT
entfernt doppelte Werte aus dem Resultset.
Standard:
ALL
TOP n
Gibt die maximale Anzahl der zurückzugebenden Ergebnisse an. Siehe TOP <n>.
object_name
oder .alias
Gibt 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.EXCLUDE col_name
.EXCLUDE (col_name, col_name, ...)
Wenn Sie alle Spalten auswählen (
SELECT *
oderSELECT table_name.*
), geben Sie 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 inEXCLUDE
an. Beispiel:SELECT table_a.* EXCLUDE column_in_table_a , table_b.* EXCLUDE column_in_table_b ...
RENAME col_name AS col_alias
.RENAME (col_name AS col_alias, col_name AS col_alias, ...)
Wenn Sie alle Spalten auswählen (
SELECT *
oderSELECT table_name.*
), geben Sie 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 inRENAME
an. Beispiel:SELECT table_a.* RENAME column_in_table_a AS col_alias_a, table_b.* RENAME column_in_table_b AS col_alias_b ...
Bemerkung
Wenn Sie nach SELECT *
sowohl EXCLUDE
als auch RENAME
angeben:
Sie müssen
EXCLUDE
vorRENAME
angegeben:SELECT * EXCLUDE col_a RENAME col_b AS alias_b ...
Es kann nicht die gleiche Spalte in
EXCLUDE
undRENAME
angegeben werden.
col_name
Gibt den Spaltenbezeichner an, wie in der FROM-Klausel definiert.
$col_position
Gibt 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.
expr
Gibt einen Ausdruck an, beispielsweise einen mathematischen Ausdruck, der für eine bestimmte Zeile einen bestimmten Wert ergibt.
[ AS ] col_alias
Gibt 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.
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.
Beispiele¶
Nachfolgend finden Sie ein paar einfache Beispiele.
Viele Beispiele sind in anderen Teilen der Dokumentation enthalten, einschließlich der detaillierten Beschreibung von Abfragesyntax.
Einrichten der Daten für die Beispiele¶
Einige der Abfragen unten verwenden folgende Tabellen und Daten:
CREATE TABLE employee_table ( employee_ID INTEGER, last_name VARCHAR, first_name VARCHAR, department_ID INTEGER ); CREATE TABLE department_table ( department_ID INTEGER, department_name VARCHAR );INSERT INTO employee_table (employee_ID, last_name, first_name, department_ID) VALUES (101, 'Montgomery', 'Pat', 1), (102, 'Levine', 'Terry', 2), (103, 'Comstock', 'Dana', 2); INSERT INTO department_table (department_ID, department_name) VALUES (1, 'Engineering'), (2, 'Customer Support'), (3, 'Finance');
Beispiele für das Auswählen aller Spalten (SELECT *)¶
Auswählen aller Spalten, Ausschließen einer Spalte und Umbenennen mehrerer Spalten
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:
SELECT * FROM employee_table;
+-------------+------------+------------+---------------+
| EMPLOYEE_ID | LAST_NAME | FIRST_NAME | DEPARTMENT_ID |
|-------------+------------+------------+---------------|
| 101 | Montgomery | Pat | 1 |
| 102 | Levine | Terry | 2 |
| 103 | Comstock | Dana | 2 |
+-------------+------------+------------+---------------+
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:
SELECT * EXCLUDE department_id FROM employee_table;
+-------------+------------+------------+
| EMPLOYEE_ID | LAST_NAME | FIRST_NAME |
|-------------+------------+------------|
| 101 | Montgomery | Pat |
| 102 | Levine | Terry |
| 103 | Comstock | Dana |
+-------------+------------+------------+
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:
SELECT * EXCLUDE (department_id, employee_id) FROM employee_table;
+------------+------------+
| LAST_NAME | FIRST_NAME |
|------------+------------|
| Montgomery | Pat |
| Levine | Terry |
| Comstock | Dana |
+------------+------------+
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:
SELECT * RENAME department_id AS department FROM employee_table;
+-------------+------------+------------+------------+
| EMPLOYEE_ID | LAST_NAME | FIRST_NAME | DEPARTMENT |
|-------------+------------+------------+------------|
| 101 | Montgomery | Pat | 1 |
| 102 | Levine | Terry | 2 |
| 103 | Comstock | Dana | 2 |
+-------------+------------+------------+------------+
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:
SELECT * RENAME (department_id AS department, employee_id AS id) FROM employee_table;
+-----+------------+------------+------------+
| ID | LAST_NAME | FIRST_NAME | DEPARTMENT |
|-----+------------+------------+------------|
| 101 | Montgomery | Pat | 1 |
| 102 | Levine | Terry | 2 |
| 103 | Comstock | Dana | 2 |
+-----+------------+------------+------------+
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:
SELECT * EXCLUDE first_name RENAME (department_id AS department, employee_id AS id) FROM employee_table;
+-----+------------+------------+
| ID | LAST_NAME | DEPARTMENT |
|-----+------------+------------|
| 101 | Montgomery | 1 |
| 102 | Levine | 2 |
| 103 | Comstock | 2 |
+-----+------------+------------+
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.
SELECT
employee_table.* EXCLUDE department_id,
department_table.* RENAME department_name AS department
FROM employee_table INNER JOIN department_table
ON employee_table.department_id = department_table.department_id
ORDER BY department, last_name, first_name;
+-------------+------------+------------+---------------+------------------+
| EMPLOYEE_ID | LAST_NAME | FIRST_NAME | DEPARTMENT_ID | DEPARTMENT |
|-------------+------------+------------+---------------+------------------|
| 103 | Comstock | Dana | 2 | Customer Support |
| 102 | Levine | Terry | 2 | Customer Support |
| 101 | Montgomery | Pat | 1 | Engineering |
+-------------+------------+------------+---------------+------------------+
Beispiele für das Auswählen bestimmter Spalten (SELECT <Spaltenname>)¶
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.
SELECT last_name FROM employee_table WHERE employee_ID = 101; +------------+ | LAST_NAME | |------------| | Montgomery | +------------+
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.
SELECT department_name, last_name, first_name FROM employee_table INNER JOIN department_table ON employee_table.department_ID = department_table.department_ID ORDER BY department_name, last_name, first_name; +------------------+------------+------------+ | DEPARTMENT_NAME | LAST_NAME | FIRST_NAME | |------------------+------------+------------| | Customer Support | Comstock | Dana | | Customer Support | Levine | Terry | | Engineering | Montgomery | Pat | +------------------+------------+------------+
Auswählen einer Spalte nach Position¶
Dieses Beispiel zeigt, wie Sie mithilfe von $
eine Spalte statt über den Spaltennamen mit der Spaltennummer identifizieren:
SELECT $2 FROM employee_table ORDER BY $2; +------------+ | $2 | |------------| | Comstock | | Levine | | Montgomery | +------------+
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:
SELECT pi() * 2.0 * 2.0 AS area_of_circle; +----------------+ | AREA_OF_CIRCLE | |----------------| | 12.566370614 | +----------------+