- 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 vonIN
(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. Das folgende Beispiel zeigt den Unterschied zwischen der Verwendung vonIN
als Operator und dem Aufruf vonf()
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.
Sortierungsdetails¶
Arguments with collation specifications are currently not supported.
Beispiele¶
Verwenden von IN
mit einfachen Literalen¶
Die folgenden Beispiele veranschaulichen die Verwendung von IN
und NOT IN
in 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¶
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 TABLE my_table (col_1 INTEGER, col_2 INTEGER, col_3 INTEGER); INSERT INTO my_table (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 my_table 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 my_table 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 my_table ) 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 | +--------+