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 cityFROM addresses;Die DISTINCT-Klausel kann verwendet werden, um nur die eindeutigen Zeilen im Ergebnis zurückzugeben – Duplikate werden herausgefiltert.
Abfragen, die mit
SELECT DISTINCTbeginnen, führen eine Deduplizierung aus, was teuer ist. Verwenden SieDISTINCTdaher 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, populationFROM citiesORDER 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
DISTINCTauf allen Spalten teuer sein. Erwägen Sie daherDISTINCT ONauf einer Spalte (oder einer Spaltenmenge), die für Ihre Ergebnisse ausreichend eindeutig ist.DISTINCT ONauf 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 addressesGROUP 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.