Catégories :

Fonctions d’expressions conditionnelles

[ NOT ] IN

Teste si son argument est ou n’est pas l’un des membres d’une liste explicite ou le résultat d’une sous-requête.

Note

Sous la forme de sous-requête, IN est équivalent à = ANY et NOT IN est équivalent à <> ALL.

Syntaxe

<value> [ NOT ] IN ( <value1> , <value2> , ... )

<value> [ NOT ] IN ( ( <value1> , <value2> , ... ) , ( <value3> , <value4> , ... ) )

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

Notes sur l’utilisation

  • Comme dans la plupart des contextes, NULL n’est pas égal à NULL. Si <valeur> est NULL, la valeur renvoyée par la fonction est NULL, que la liste ou la sous-requête contienne ou non NULL.

Détails du classement

Arguments with collation specifications are currently not supported.

Exemples

Ces exemples montrent comment utiliser IN avec des littéraux.

SELECT
    CASE
        WHEN 1 IN (1, 2, 3)
        THEN 'true'
        ELSE 'false'
    END AS RESULT;
+--------+
| RESULT |
|--------|
| true   |
+--------+
SELECT
    CASE
        WHEN 'a' NOT IN (SELECT column1 FROM VALUES ('b'), ('c'), ('d'))
        THEN 'true'
        ELSE 'false'
    END AS RESULT;
+--------+
| RESULT |
|--------|
| true   |
+--------+

Cet exemple montre comment utiliser IN avec une table :

CREATE TABLE MyTable (col_1 INTEGER, col_2 INTEGER, col_3 INTEGER);
INSERT INTO MyTable (col_1, col_2, col_3) VALUES
    (1, 1, 1),
    (1, 2, 3),
    (4, 5, NULL);
SELECT *
    FROM MYTABLE
    WHERE (col_1, col_2, col_3) IN ((1,2,3),(4,5,6));
+-------+-------+-------+
| COL_1 | COL_2 | COL_3 |
|-------+-------+-------|
|     1 |     2 |     3 |
+-------+-------+-------+

Rappelez-vous que NULL! = NULL. Ce qui suit montre que « (4, 5, NULL) » ne correspond pas en soi, car NULL ne correspond pas en soi :

SELECT *
    FROM MYTABLE
    WHERE (col_1, col_2, col_3) IN ((9, 8, 7), (4, 5, NULL));
+-------+-------+-------+
| COL_1 | COL_2 | COL_3 |
|-------+-------+-------|
+-------+-------+-------+

Voici un exemple simple d’utilisation de NOT IN :

SELECT *
    FROM MYTABLE
    WHERE (col_1, col_2, col_3) NOT IN ((1, 1, 1), (2, 2, 2));
+-------+-------+-------+
| COL_1 | COL_2 | COL_3 |
|-------+-------+-------|
|     1 |     2 |     3 |
|     4 |     5 |  NULL |
+-------+-------+-------+