L’opérateur logique IN dans SQL s’utilise avec la commande WHERE pour vérifier si une colonne est égale à une des valeurs comprise dans set de valeurs déterminés. C’est une méthode simple pour vérifier si une colonne est égale à une valeur OU une autre valeur OU une autre valeur et ainsi de suite, sans avoir à utiliser de multiple fois l’opérateur OR.
Syntaxe
Pour chercher toutes les lignes où la colonne “nom_colonne” est égale à ‘valeur 1’ OU ‘valeur 2’ ou ‘valeur 3’, il est possible d’utiliser la syntaxe suivante:
SELECT nom_colonne FROM table WHERE nom_colonne IN ( valeur1, valeur2, valeur3, ... )
A savoir : entre les parenthèses il n’y a pas de limite du nombre d’arguments. Il est possible d’ajouter encore d’autres valeurs.
Cette syntaxe peut être associée à l’opérateur NOT pour recherche toutes les lignes qui ne sont pas égales à l’une des valeurs stipulées.
Simplicité de l’opérateur IN
La syntaxe utilisée avec l’opérateur est plus simple que d’utiliser une succession d’opérateur OR. Pour le montrer concrètement avec un exemple, voici 2 requêtes qui retournerons les mêmes résultats, l’une utilise l’opérateur IN, tandis que l’autre utilise plusieurs OR.
Requête avec plusieurs OR :
SELECT prenom FROM utilisateur WHERE prenom = 'Maurice' OR prenom = 'Marie' OR prenom = 'Thimoté'
Requête équivalent avec l’opérateur IN :
SELECT prenom FROM utilisateur WHERE prenom IN ( 'Maurice', 'Marie', 'Thimoté' )
Exemple
Imaginons une table “adresse” qui contient une liste d’adresse associée à des utilisateurs d’une application.
id | id_utilisateur | addr_rue | addr_code_postal | addr_ville |
---|---|---|---|---|
1 | 23 | 35 Rue Madeleine Pelletier | 25250 | Bournois |
2 | 43 | 21 Rue du Moulin Collet | 75006 | Paris |
3 | 65 | 28 Avenue de Cornouaille | 27220 | Mousseaux-Neuville |
4 | 67 | 41 Rue Marcel de la Provoté | 76430 | Graimbouville |
5 | 68 | 18 Avenue de Navarre | 75009 | Paris |
Si l’ont souhaite obtenir les enregistrements des adresses de Paris et de Graimbouville, il est possible d’utiliser la requête suivante:
SELECT * FROM adresse WHERE addr_ville IN ( 'Paris', 'Graimbouville' )
Résultats :
id | id_utilisateur | addr_rue | addr_code_postal | addr_ville |
---|---|---|---|---|
2 | 43 | 21 Rue du Moulin Collet | 75006 | Paris |
4 | 67 | 41 Rue Marcel de la Provoté | 76430 | Graimbouville |
5 | 68 | 18 Avenue de Navarre | 75009 | Paris |