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:

Abfragesyntax

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 * oder SELECT 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 in EXCLUDE 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 * oder SELECT 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 in RENAME 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 vor RENAME angegeben:

    SELECT * EXCLUDE col_a RENAME col_b AS alias_b ...
    
  • Es kann nicht die gleiche Spalte in EXCLUDE und RENAME 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 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 |
+----------------+
Zurück zum Anfang