Zum Inhalt springen

SELECT-Klausel

Die SELECT-Klausel legt die Liste der Spalten fest, die die Abfrage zurückgibt. Obwohl sie als erste Klausel erscheint, werden die Ausdrücke hier logisch erst am Ende ausgeführt. Die SELECT-Klausel kann beliebige Ausdrücke enthalten, die die Ausgabe umwandeln, sowie Aggregate und Fensterfunktionen.

Beispiele

Wählt alle Spalten aus der Tabelle tbl:

SELECT * FROM tbl;

Führt Arithmetik auf den Spalten einer Tabelle aus und vergibt einen Alias:

SELECT col1 + col2 AS res, sqrt(col1) AS root FROM tbl;

Verwendet Präfix-Aliase:

SELECT
res: col1 + col2,
root: sqrt(col1)
FROM tbl;

Wählt alle eindeutigen Städte aus der Tabelle addresses:

SELECT DISTINCT city FROM addresses;

Gibt die Gesamtzahl der Zeilen in der Tabelle addresses zurück:

SELECT count(*) FROM addresses;

Wählt alle Spalten außer der Spalte city aus der Tabelle addresses:

SELECT * EXCLUDE (city) FROM addresses;

Wählt alle Spalten aus der Tabelle addresses, ersetzt city jedoch durch lower(city):

SELECT * REPLACE (lower(city) AS city) FROM addresses;

Wählt alle Spalten, die dem angegebenen regulären Ausdruck entsprechen:

SELECT COLUMNS('number\d+') FROM addresses;

Berechnet eine Funktion auf allen angegebenen Spalten einer Tabelle:

SELECT min(COLUMNS(*)) FROM addresses;

Um Spalten mit Leerzeichen oder Sonderzeichen auszuwählen, verwenden Sie doppelte Anführungszeichen ("):

SELECT "Some Column Name" FROM tbl;

Syntax

SELECT-Liste

Die SELECT-Klausel enthält eine Liste von Ausdrücken, die das Ergebnis einer Abfrage festlegen. Die Select-Liste kann auf beliebige Spalten der FROM-Klausel verweisen und sie über Ausdrücke kombinieren. Da die Ausgabe einer SQL-Abfrage eine Tabelle ist, hat jeder Ausdruck in der SELECT-Klausel auch einen Namen. Die Ausdrücke können mit der AS-Klausel explizit benannt werden (z. B. expr AS name). Gibt der Benutzer keinen Namen an, benennt das System die Ausdrücke automatisch.

Spaltennamen sind nicht case-sensitiv. Details finden Sie in den Regeln zur Groß-/Kleinschreibung.

Sternausdrücke

Wählt alle Spalten aus der Tabelle tbl:

SELECT *
FROM tbl;

Wählt alle Spalten, die dem angegebenen regulären Ausdruck entsprechen:

SELECT COLUMNS('number\d+')
FROM addresses;

Der Sternausdruck ist ein besonderer Ausdruck, der sich anhand des Inhalts der FROM-Klausel zu mehreren Ausdrücken erweitert. Im einfachsten Fall erweitert sich * zu allen Ausdrücken der FROM-Klausel. Spalten können auch über reguläre Ausdrücke oder Lambda-Funktionen ausgewählt werden. Details finden Sie auf der Seite zum Sternausdruck.

DISTINCT-Klausel

Wählt alle eindeutigen Städte aus der Tabelle addresses:

SELECT DISTINCT city
FROM addresses;

Die DISTINCT-Klausel kann verwendet werden, um nur die eindeutigen Zeilen im Ergebnis zurückzugeben – Duplikate werden herausgefiltert.

Abfragen, die mit SELECT DISTINCT beginnen, führen eine Deduplizierung aus, was teuer ist. Verwenden Sie DISTINCT daher nur, wenn nötig.

DISTINCT ON-Klausel

Wählt nur die Stadt mit der höchsten Einwohnerzahl für jedes Land:

SELECT DISTINCT ON(country) city, population
FROM cities
ORDER BY population DESC;

Die DISTINCT ON-Klausel gibt nur eine Zeile pro eindeutigem Wert in der in der ON-Klausel definierten Ausdrucksmenge zurück. Ist eine ORDER BY-Klausel vorhanden, ist die zurückgegebene Zeile die erste, die nach den ORDER BY-Kriterien angetroffen wird. Ohne ORDER BY-Klausel ist die erste angetroffene Zeile nicht definiert und kann eine beliebige Zeile der Tabelle sein.

Bei großen Datensätzen kann DISTINCT auf allen Spalten teuer sein. Erwägen Sie daher DISTINCT ON auf einer Spalte (oder einer Spaltenmenge), die für Ihre Ergebnisse ausreichend eindeutig ist. DISTINCT ON auf der/den Schlüsselspalte(n) einer Tabelle garantiert beispielsweise vollständige Eindeutigkeit.

Aggregate

Gibt die Gesamtzahl der Zeilen in der Tabelle addresses zurück:

SELECT count(*)
FROM addresses;

Gibt die Gesamtzahl der Zeilen in der Tabelle addresses gruppiert nach Stadt zurück:

SELECT city, count(*)
FROM addresses
GROUP BY city;

Aggregatfunktionen sind besondere Funktionen, die mehrere Zeilen zu einem einzelnen Wert zusammenfassen. Stehen Aggregatfunktionen in der SELECT-Klausel, wird die Abfrage zu einer Aggregatabfrage. In einer Aggregatabfrage müssen alle Ausdrücke entweder Teil einer Aggregatfunktion oder Teil einer Gruppe sein (wie in der GROUP BY-Klausel angegeben).

Fensterfunktionen

Erzeugt eine Spalte row_number mit fortlaufenden Kennungen für jede Zeile:

SELECT row_number() OVER ()
FROM sales;

Berechnet die Differenz zwischen dem aktuellen Betrag und dem vorherigen Betrag, nach Zeit geordnet:

SELECT amount - lag(amount) OVER (ORDER BY time)
FROM sales;

Fensterfunktionen sind besondere Funktionen, die die Berechnung von Werten relativ zu anderen Zeilen in einem Ergebnis erlauben. Fensterfunktionen werden durch die OVER-Klausel gekennzeichnet, die die Fensterspezifikation enthält. Die Fensterspezifikation definiert den Rahmen oder Kontext, in dem die Fensterfunktion berechnet wird. Weitere Informationen finden Sie auf der Seite zu Fensterfunktionen.

Funktion unnest

Entschachtelt ein Array um eine Ebene:

SELECT unnest([1, 2, 3]);

Entschachtelt ein Struct um eine Ebene:

SELECT unnest({'a': 42, 'b': 84});

Die Funktion unnest ist eine besondere Funktion, die zusammen mit Arrays, Listen oder Structs verwendet werden kann. Die Unnest-Funktion entfernt eine Verschachtelungsebene vom Typ. Beispielsweise wird INTEGER[] zu INTEGER. STRUCT(a INTEGER, b INTEGER) wird zu a INTEGER, b INTEGER. Mit unnest können verschachtelte Typen in gewöhnliche skalare Typen umgewandelt werden, mit denen sich leichter arbeiten lässt.