IN-Operator
Der Operator IN prüft, ob der linke Ausdruck in der Sammlung auf der rechten Seite (RHS) enthalten ist.
Unterstützte Sammlungen auf der RHS sind Tupel, Listen und Maps sowie Unterabfragen, die eine einzelne Spalte zurückgeben. Die Einschränkung auf eine Spalte gilt nur für Unterabfragen; Tupel, Listen und Maps dürfen selbst zusammengesetzte Werte enthalten.
IN (val1, val2, ...) (Tupel)
Der Operator IN auf einem Tupel (val1, val2, ...) liefert true, wenn der Ausdruck in der RHS vorkommt, false, wenn der Ausdruck nicht in der RHS vorkommt und die RHS keine NULL-Werte hat, oder NULL, wenn der Ausdruck nicht in der RHS vorkommt und die RHS NULL-Werte hat.
SELECT 'Math' IN ('CS', 'Math');trueSELECT 'English' IN ('CS', 'Math');falseSELECT 'Math' IN ('CS', 'Math', NULL);trueSELECT 'English' IN ('CS', 'Math', NULL);NULLIN [val1, val2, ...] (Liste)
Der Operator IN arbeitet auf Listen nach der in Python verwendeten Semantik.
Anders als beim Operator IN auf Tupeln ändert das Vorhandensein von NULL-Werten auf der rechten Seite das Ergebnis nicht:
SELECT 'Math' IN ['CS', 'Math', NULL];trueSELECT 'English' IN ['CS', 'Math', NULL];falseIN Map
Der Operator IN arbeitet auf Maps nach der in Python verwendeten Semantik, d. h., er prüft das Vorhandensein von Schlüsseln (nicht von Werten):
SELECT 'key1' IN MAP {'key1': 50, 'key2': 75};trueSELECT 'key3' IN MAP {'key1': 50, 'key2': 75};falseIN Unterabfrage
Der Operator IN arbeitet mit Unterabfragen, die eine einzelne Spalte zurückgeben.
Zum Beispiel:
SELECT 42 IN (SELECT unnest([32, 42, 52]) AS x);trueGibt die Unterabfrage mehr als eine Spalte zurück, wird ein Binder-Fehler geworfen:
SELECT 42 IN (SELECT unnest([32, 42, 52]) AS x, 'a' AS y);Binder Error:Subquery returns 2 columns - expected 1IN Zeichenkette
Der Operator IN kann als Kurzform für die Zeichenkettenfunktion contains verwendet werden.
Zum Beispiel:
SELECT 'Hello' IN 'Hello World';trueNOT IN
NOT IN kann verwendet werden, um zu prüfen, ob ein Element nicht in der Menge vorkommt.
x NOT IN y ist gleichwertig mit NOT (x IN y).