Temps de lecture approximative : 6 minutes

Opérateurs SQL IN et NOT IN

En SQL, l'opérateur IN permet de sélectionner des enregistrements si la valeur d'une colonne est comprise dans une liste de valeurs. C'est la commande idéale pour vérifier si une colonne possède une valeur ou une autre. La commande IN permet d'éviter d'avoir à recourir à de multiples OR. Cet opérateur s'utilise avec la commande WHERE. L’utilisation la plus basique de cette commande s’effectue de la manière suivante :

SQL
SELECT une_colonne FROM une_table WHERE une_colonne IN ("valeur_1", "valeur_2", "valeur_3");

Cette requête SQL va donc sélectionner, grâce à la commande IN, les enregistrements provenant de la table nommée une_table et dont la valeur de la colonne une_colonne est valeur_1 ou valeur_2 ou valeur_3.

Il n'y a pas de limite de valeurs pour la commande IN. On peut donc ajouter autant de valeurs que nécessaire entre les parenthèses. Cependant, il est tout de même nécessaire d'ajouter au moins une valeur.

Afin de mettre en évidence l'utilisation de l'opérateur IN et de comprendre rapidement comment ce dernier fonctionne, voyons sans plus attendre un exemple simple. Nous comparerons également la solution avec la commande IN et OR. Pour cet exemple, nous utiliserons la table commandes qui contient les colonnes et données suivantes.

Table : commandes
id_commande id_client date_ajout transporteur
1 1 2019-04-01 Mondial Relay
2 2 2019-04-02 Colissimo
3 2 2019-04-05 Colissimo
4 5 2019-04-08 Colissimo
5 9 2019-04-10 Colissimo

Reprenons notre première requête SQL avec l'opérateur IN et complétons correctement cette dernière avec la table commandes. Nous souhaitons sélectionner les commandes avec les identifiants 3, 4 ou 5. Pour effectuer cette opération, la requête est la suivante :

SQL
SELECT * FROM commandes WHERE id_commande IN(3, 4, 5);
Résultat
id_commande id_client date_ajout transporteur
3 2 2019-04-05 Colissimo
4 5 2019-04-08 Colissimo
5 9 2019-04-10 Colissimo

Maintenant que nous avons la solution avec la commande IN, nous pouvons comparer avec l'utilisation frénétique de la commande OR. Cette solution produit le même résultat.

SQL
SELECT * FROM commandes WHERE id_commande = 3 OR id_commande = 4 OR id_commande = 5;

Dans certains cas de figures, nous souhaitons obtenir exactement l'inverse de ce que propose l'opérateur IN. En SQL, l'opérateur NOT IN permet de sélectionner des enregistrements si la valeur d'une colonne n'est pas comprise dans une liste de valeurs.

Reprenons notre première requête SQL avec l'opérateur IN et modifions cette dernière pour utiliser l'opérateur NOT IN. Nous souhaitons sélectionner les commandes qui n'ont pas les identifiants 1 ou 5. Pour effectuer cette opération, la requête est la suivante :

SQL
SELECT * FROM commandes WHERE id_commande NOT IN(1, 5);
Résultat
id_commande id_client date_ajout transporteur
2 2 2019-04-02 Colissimo
3 2 2019-04-05 Colissimo
4 5 2019-04-08 Colissimo