Kategorien:

Funktionen für bedingte Ausdrücke

[ 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> ...  ] )
Copy

So vergleichen Sie Zeilenkonstruktoren (Wertelisten in Klammern):

( <value_A> [, <value_B> ... ] ) [ NOT ] IN (  ( <value_1> [ , <value_2> ... ] )  [ , ( <value_3> [ , <value_4> ... ] )  ...  ]  )
Copy

So vergleichen Sie einen Wert mit den von einer Unterabfrage zurückgegebenen Werten:

<value> [ NOT ] IN ( <subquery> )
Copy

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;
    
    Copy
  • Syntaktisch wird IN als Operator und nicht als Funktion behandelt. Das folgende 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) ...
    
    Copy

    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)) ...
    
    Copy
  • 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   |
+--------+
Copy
SELECT 4 NOT IN (1, 2, 3) AS RESULT;
+--------+
| RESULT |
|--------|
| True   |
+--------+
Copy

Verwenden von IN mit einer Unterabfrage

SELECT 'a' IN (
    SELECT column1 FROM VALUES ('b'), ('c'), ('d')
    ) AS RESULT;
+--------+
| RESULT |
|--------|
| False  |
+--------+
Copy

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);
Copy

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 |
+-------+-------+-------+
Copy

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 |
+-------+-------+-------+
Copy

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   |
+--------+
Copy

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   |
+--------+
Copy
SELECT (4, 5, NULL) IN ( (4, 5, NULL), (7, 8, 9) ) AS RESULT;
+--------+
| RESULT |
|--------|
| NULL   |
+--------+
Copy