Skip to content

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.


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_colonne
FROM table
WHERE 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_colonne
FROM table
WHERE nom_colonne NOT IN (valeur1, valeur2, valeur3, ...)

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 prenom
FROM utilisateur
WHERE prenom = 'Maurice' OR prenom = 'Marie' OR prenom = 'Thimoté'

Requête équivalente avec l’opérateur IN :

SELECT prenom
FROM utilisateur
WHERE prenom IN ('Maurice', 'Marie', 'Thimoté')

La version avec IN est nettement plus concise et plus lisible, surtout lorsque la liste s’allonge.


Imaginons une table « adresse » qui contient une liste d’adresses associées à 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’on 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é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

Pour obtenir les adresses qui ne sont ni à Paris ni à Graimbouville :

SELECT *
FROM adresse
WHERE 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

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 adresse
WHERE id_utilisateur IN (
SELECT utilisateur_id
FROM commande
WHERE nb_commandes > 5
)

  • Préférez IN à une série de OR pour 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 IN avec précaution : si la sous-requête contient des valeurs NULL, le résultat peut être vide (car NULL est une valeur inconnue).

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