- Kategorien:
[ NOT ] IN¶
Prüft, ob das Argument auf einer expliziten Liste steht oder das Ergebnis einer Unterabfrage ist oder nicht.
Bemerkung
In der Unterabfrageform ist IN gleich = ANY
und NOT IN gleich <> ALL
.
Tipp
Sie können den Suchoptimierungsdienst verwenden, um die Leistung von Abfragen zu verbessern, die diese Funktion aufrufen. Weitere Details dazu finden Sie unter Suchoptimierungsdienst.
Syntax¶
So vergleichen Sie einzelne Werte:
<value> [ NOT ] IN ( <value_1> [ , <value_2> ... ] )
So vergleichen Sie Zeilenkonstruktoren (Wertelisten in Klammern):
( <value_A> [, <value_B> ... ] ) [ NOT ] IN ( ( <value_1> [ , <value_2> ... ] ) [ , ( <value_3> [ , <value_4> ... ] ) ... ] )
So vergleichen Sie einen Wert mit den von einer Unterabfrage zurückgegebenen Werten:
<value> [ NOT ] IN ( <subquery> )
Parameter¶
value
Der Wert, nach dem gesucht werden soll.
value_A
,value_B
Die Elemente eines Zeilenkonstruktors, nach denen gesucht werden soll.
Stellen Sie sicher, dass jeder Wert rechts von IN (z. B.
(value3, value4)
) die gleiche Anzahl von Elementen hat wie der Wert links von IN (z. B.(value_A, value_B)
).value_#
Ein Wert, mit dem der
value
-Wert verglichen werden soll.Wenn die Werte, mit denen verglichen werden soll, Zeilenkonstruktoren sind, dann ist jeder
value_#
-Wert ein einzelnes Element eines Zeilenkonstruktors.subquery
Eine Unterabfrage, die eine Liste von Werten zurückgibt, mit denen der
value
-Wert verglichen werden kann.
Nutzungshinweise¶
Wie in den meisten Kontexten ist NULL nicht gleich NULL. Wenn
value
NULL ist, lautet der Rückgabewert der Funktion NULL, unabhängig davon, ob die Liste oder Unterabfrage NULL enthält.Im folgenden Beispiel wird NULL und nicht TRUE zurückgegeben:
SELECT NULL IN (1, 2, NULL) AS RESULT;
Syntaktisch wird IN als Operator und nicht als Funktion behandelt. Dieses Beispiel zeigt den Unterschied zwischen der Verwendung von IN als Operator und dem Aufruf von
f()
als Funktion:SELECT f(a, b), x IN (y, z) ...
Sie können eine Funktionssyntax nicht mit IN verwenden. Sie können zum Beispiel das vorherige Beispiel nicht umschreiben als:
SELECT f(a, b), IN(x, (y, z)) ...
IN wird auch als Unterabfrageoperator betrachtet.
In einer Abfrage, die IN verwendet, können Sie ein Array mithilfe des Spread-Operators (
**
) in eine Liste von Einzelwerten erweitern. Weitere Informationen und Beispiele finden Sie unter Erweiterungsoperatoren.
Sortierungsdetails¶
Arguments with collation specifications currently aren’t supported.
Beispiele¶
Die folgenden Beispiele verwenden die Funktion IN.
Verwenden von IN mit einfachen Literalen¶
Die folgenden Beispiele veranschaulichen die Verwendung von IN und NOT IN mit einfachen Literalen:
SELECT 1 IN (1, 2, 3) AS RESULT;
+--------+
| RESULT |
|--------|
| True |
+--------+
SELECT 4 NOT IN (1, 2, 3) AS RESULT;
+--------+
| RESULT |
|--------|
| True |
+--------+
Verwenden von IN mit einer Unterabfrage¶
Dieses Beispiel zeigt, wie Sie IN in einer Unterabfrage verwenden können.
SELECT 'a' IN (
SELECT column1 FROM VALUES ('b'), ('c'), ('d')
) AS RESULT;
+--------+
| RESULT |
|--------|
| False |
+--------+
Verwenden von IN mit einer Tabelle¶
In diesen Beispielen wird die Verwendung von IN mit einer Tabelle veranschaulicht: Mit der folgenden Anweisung wird die in den Beispielen verwendete Tabelle erstellt.
CREATE OR REPLACE TABLE in_function_demo (
col_1 INTEGER,
col_2 INTEGER,
col_3 INTEGER);
INSERT INTO in_function_demo (col_1, col_2, col_3) VALUES
(1, 1, 1),
(1, 2, 3),
(4, 5, NULL);
In diesem Beispiel wird die Verwendung von IN mit einer einzelnen Spalte einer Tabelle veranschaulicht:
SELECT col_1, col_2, col_3
FROM in_function_demo
WHERE (col_1) IN (1, 10, 100, 1000)
ORDER BY col_1, col_2, col_3;
+-------+-------+-------+
| COL_1 | COL_2 | COL_3 |
|-------+-------+-------|
| 1 | 1 | 1 |
| 1 | 2 | 3 |
+-------+-------+-------+
In diesem Beispiel wird die Verwendung von IN mit mehreren Spalten einer Tabelle veranschaulicht:
SELECT col_1, col_2, col_3
FROM in_function_demo
WHERE (col_1, col_2, col_3) IN (
(1,2,3),
(4,5,6));
+-------+-------+-------+
| COL_1 | COL_2 | COL_3 |
|-------+-------+-------|
| 1 | 2 | 3 |
+-------+-------+-------+
In diesem Beispiel wird die Verwendung von IN mit einer Unterabfrage veranschaulicht, die mehreren Spalten einer Tabelle ausliest:
SELECT (1, 2, 3) IN (
SELECT col_1, col_2, col_3 FROM in_function_demo
) AS RESULT;
+--------+
| RESULT |
|--------|
| True |
+--------+
Verwenden von NULL¶
Denken Sie daran, dass NULL != NULL. Keine der folgenden Abfragen gibt eine Übereinstimmung zurück, wenn der Wert links oder rechts von IN einen NULL-Wert enthält:
SELECT NULL IN (1, 2, NULL) AS RESULT;
+--------+
| RESULT |
|--------|
| NULL |
+--------+
SELECT (4, 5, NULL) IN ( (4, 5, NULL), (7, 8, 9) ) AS RESULT;
+--------+
| RESULT |
|--------|
| NULL |
+--------+