IN – Filtrer sur une liste de valeurs
Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 4 minutes
L’opérateur logique IN dans SQL s’utilise avec la commande WHERE pour vérifier si une colonne est égale à l’une des valeurs comprises dans un ensemble de valeurs déterminées. 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 multiples fois l’opérateur OR.
Syntaxe
Section titled “Syntaxe”Pour chercher toutes les lignes où la colonne « nom_colonne » est égale à ‘valeur1’ OU ‘valeur2’ OU ‘valeur3’, il est possible d’utiliser la syntaxe suivante :
SELECT nom_colonneFROM tableWHERE nom_colonne IN (valeur1, valeur2, valeur3, ...)💡 Bon à savoir : Entre les parenthèses, il n’y a pas de limite au nombre d’arguments. Il est possible d’ajouter encore d’autres valeurs.
Cette syntaxe peut être associée à l’opérateur NOT pour rechercher toutes les lignes qui ne sont pas égales à l’une des valeurs stipulées :
SELECT nom_colonneFROM tableWHERE nom_colonne NOT IN (valeur1, valeur2, valeur3, ...)Simplicité de l’opérateur IN
Section titled “Simplicité de l’opérateur IN”La syntaxe utilisée avec l’opérateur IN est plus simple que d’utiliser une succession d’opérateurs OR.
Pour le montrer concrètement avec un exemple, voici deux requêtes qui retourneront exactement 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 prenomFROM utilisateurWHERE prenom = 'Maurice' OR prenom = 'Marie' OR prenom = 'Thimoté'Requête équivalente avec l’opérateur IN :
SELECT prenomFROM utilisateurWHERE prenom IN ('Maurice', 'Marie', 'Thimoté')La version avec IN est nettement plus concise et plus lisible, surtout lorsque la liste s’allonge.
Exemple concret
Section titled “Exemple concret”Imaginons une table « adresse » qui contient une liste d’adresses associées à des utilisateurs d’une application.
Table « adresse »
Section titled “Table « adresse »”| 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’on souhaite obtenir les enregistrements des adresses de Paris et de Graimbouville, il est possible d’utiliser la requête suivante :
SELECT *FROM adresseWHERE addr_ville IN ('Paris', 'Graimbouville')Résultat :
| 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 |
Utiliser NOT IN
Section titled “Utiliser NOT IN”Pour obtenir les adresses qui ne sont ni à Paris ni à Graimbouville :
SELECT *FROM adresseWHERE addr_ville NOT IN ('Paris', 'Graimbouville')Résultat :
| id | id_utilisateur | addr_rue | addr_code_postal | addr_ville |
|---|---|---|---|---|
| 1 | 23 | 35 Rue Madeleine Pelletier | 25250 | Bournois |
| 3 | 65 | 28 Avenue de Cornouaille | 27220 | Mousseaux-Neuville |
IN avec une sous-requête
Section titled “IN avec une sous-requête”L’opérateur IN peut également être utilisé avec une sous-requête pour filtrer dynamiquement.
Par exemple, pour obtenir toutes les adresses des utilisateurs qui ont effectué plus de 5 commandes (nous verrons les sous-requêtes en détail plus tard) :
SELECT *FROM adresseWHERE id_utilisateur IN ( SELECT utilisateur_id FROM commande WHERE nb_commandes > 5)Bonnes pratiques
Section titled “Bonnes pratiques”- Préférez
INà une série deORpour une meilleure lisibilité. - Faites attention à la casse des valeurs si votre SGBD y est sensible.
- Évitez les listes trop longues (plus de quelques centaines d’éléments) : dans ce cas, une sous-requête ou une table temporaire peut être plus performante.
- Utilisez
NOT INavec précaution : si la sous-requête contient des valeursNULL, le résultat peut être vide (carNULLest une valeur inconnue).
Prochain chapitre
Section titled “Prochain chapitre”Vous savez désormais comment filtrer sur une liste de valeurs avec IN. Mais que faire si vous souhaitez filtrer sur un intervalle de valeurs, par exemple entre deux dates ou entre deux nombres ?
👉 Chapitre 8 : BETWEEN – Filtrer dans un intervalle
Bonne continuation !
Junior TSAFACK – 08/08/2026