Temps de lecture approximative : 6 minutes
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 :
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.
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 :
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.
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 :
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 |