Accéder au contenu principal

Comment utiliser l’opérateur SQL IN : guide des techniques de filtrage efficaces

L’opérateur SQL IN permet de filtrer les résultats d’une requête pour ne conserver que les lignes qui respectent des conditions données. Découvrez tout son potentiel et ses alternatives.
Actualisé 19 sept. 2026  · 8 min lire

Explorer avec l’IA

ChatGPTClaudePerplexity

L’opérateur SQL IN est un outil pratique pour filtrer des données à partir d’un ensemble de valeurs. Intégré à des requêtes longues, l’opérateur IN aide à simplifier des requêtes complexes et améliore leur lisibilité.

Si vous débutez dans les métiers de la donnée, nous vous recommandons les cours Introduction to SQL et SQL Fundamentals de DataCamp pour apprendre les bases du filtrage des données en SQL. Pour un mémo rapide, consultez notre aide‑mémoire SQL Basics.

Qu’est‑ce que l’opérateur SQL IN ?

L’opérateur SQL IN est un puissant levier pour filtrer les données dans vos requêtes. Il affine les résultats en ne renvoyant que les lignes qui répondent aux conditions spécifiées.

L’opérateur IN s’utilise après la clause WHERE pour gérer plusieurs conditions. Il est donc pertinent lorsque la colonne filtrée peut prendre différentes valeurs.

-- Sélectionner les colonnes employee_id, employee_name et department
SELECT employee_id, employee_name, department
FROM employees
-- Ne conserver que les employés dont le département est 'Sales' ou 'HR'
WHERE department IN ('Sales', 'HR');

Dans l’exemple ci‑dessus, nous sélectionnons les colonnes employee_id, employee_name et department de la table employees. Nous ne retournons toutefois que les lignes où les employés appartiennent aux départements Sales et HR.

L’opérateur IN peut filtrer différents types SQL, notamment des chaînes, des nombres et des dates. Assurez‑vous toujours que la colonne de référence possède le type de données approprié lors du filtrage.

Syntaxe de l’opérateur SQL IN

La syntaxe de IN est simple pour filtrer des valeurs. Il s’utilise dans la clause WHERE afin de filtrer plusieurs valeurs sur une colonne. La syntaxe générale de IN est la suivante.

-- Sélectionner les colonnes à récupérer
SELECT column_name(s)
-- Indiquer la table depuis laquelle récupérer les données
FROM table_name
-- Ne conserver que les lignes dont la valeur de colonne correspond à l'une des valeurs listées
WHERE column_name IN (value1, value2, ...);

Voici un exemple concret d’utilisation de IN dans une clause WHERE.

-- Sélectionner les colonnes employee_id, employee_name et department
SELECT employee_id, employee_name, department
FROM employees
-- Ne conserver que les employés dont le département est 'Sales' et 'HR'
WHERE department IN ('Sales', 'HR');

Points importants à retenir

L’opérateur IN s’emploie dans la clause WHERE d’une instruction SELECT. Ce positionnement permet de filtrer les lignes selon plusieurs valeurs. Utilisé dans une requête SQL, IN simplifie les écritures complexes et les rend plus lisibles.

L’opérateur IN est standard sur la plupart des bases de données, notamment SQL Server, PostgreSQL, MySQL et Oracle. Il est recommandé d’écrire IN en majuscules pour une meilleure lisibilité.

Cas d’usage courants de l’opérateur IN

L’opérateur SQL IN intervient dans de nombreux scénarios d’analyse. Passons en revue les usages les plus fréquents : filtrage de données, gestion de multiples valeurs et utilisation avec des sous‑requêtes.

Filtrer des données

L’opérateur IN filtre les enregistrements et renvoie un ensemble de valeurs spécifiées. Par exemple, la requête ci‑dessous sélectionne toutes les colonnes de la table employees et retourne les lignes des départements Sales, HR et IT.

-- Sélectionner toutes les colonnes de la table employees
SELECT employee_id, employee_name, department
FROM employees
-- Ne conserver que les départements 'Sales', 'HR' et 'IT'
WHERE department IN ('Sales', 'HR', 'IT');

Gérer plusieurs valeurs

L’opérateur IN permet aussi de filtrer sur plusieurs valeurs. C’est particulièrement utile lorsque vous auriez autrement enchaîné plusieurs conditions OR. IN offre ainsi une écriture plus concise et lisible.

Voici à quoi ressemble la requête avec l’opérateur OR au lieu de IN.

-- Requête principale pour sélectionner employee_id et name depuis la table employees
SELECT employee_id, name
FROM employees
-- Filtrer les employés selon plusieurs noms de département avec des conditions OR
WHERE department = 'Sales'
OR department = 'Marketing'
OR department = 'HR';

Voici la même requête avec l’opérateur IN. Remarquez la simplicité obtenue en supprimant les répétitions de OR.

-- Requête principale pour sélectionner employee_id et name depuis la table employees
SELECT employee_id, name
FROM employees
-- Filtrer les employés sur une liste de départements avec l'opérateur IN
WHERE department IN ('Sales', 'Marketing', 'HR');

Sous‑requêtes

Vous pouvez également utiliser IN pour filtrer des résultats à partir d’une sous‑requête. Cette approche permet de baser le filtrage sur une autre requête ou des données liées. Dans l’exemple ci‑dessous, la sous‑requête sélectionne le department_id du département Sales depuis la table departments. La requête principale retourne alors les employee_id et noms depuis employees, filtrés selon la sous‑requête.

-- Requête principale pour sélectionner employee_id et name depuis la table employees
SELECT employee_id, name
FROM employees
-- Filtrer les employés selon department_id grâce à une sous-requête
WHERE department_id IN (
    -- Sous-requête pour récupérer le department_id du département "Sales"
    SELECT department_id
    FROM departments
    WHERE department_name = 'Sales'
);

Limites et alternatives

Même si l’opérateur IN est simple à utiliser, il présente certaines limites, notamment :

  • Performances avec de longues listes : utiliser IN avec de grandes listes de valeurs peut dégrader les performances et ralentir l’exécution de la requête.
  • Gestion des valeurs NULL : IN ne gère pas efficacement les valeurs NULL et peut produire des résultats inattendus, car NULL n’est pas présent dans la liste de valeurs.
  • Flexibilité limitée : IN montre ses limites sur de larges jeux de données impliquant de multiples colonnes. On ne peut filtrer qu’un nombre restreint de colonnes via des sous‑requêtes.

Pour contourner ces limites, plusieurs alternatives existent :

Utiliser l’opérateur EXISTS

L’opérateur EXISTS vérifie la présence d’enregistrements retournés par une sous‑requête. Bien employé, il est performant et souvent plus rapide.

-- Sélectionner employee_id et employee_name pour les employés de départements situés à New York avec EXISTS
SELECT employee_id, employee_name
FROM employees e
-- Vérifier l'existence d'une ligne dans la table departments
WHERE EXISTS (
    -- SELECT 1 sert d'indicateur ; on vérifie simplement l'existence
    SELECT 1
    FROM departments d
    -- Faire correspondre department_id entre employees et departments
    WHERE d.department_id = e.department_id
    -- Ne conserver que les départements situés à New York
    AND d.location = 'New York'
);

Utiliser JOIN

La clause SQL JOIN est efficace pour des filtrages plus complexes, notamment lorsque les données proviennent de colonnes liées entre plusieurs tables. Dans l’exemple ci‑dessous, la clause JOIN relie les tables employees et departments sur department_id pour filtrer les employés travaillant à New York.

-- Sélectionner employee_id et employee_name pour les employés de départements situés à New York avec JOIN
SELECT e.employee_id, e.employee_name
FROM employees e
-- Joindre la table employees à la table departments sur department_id
JOIN departments d ON e.department_id = d.department_id
-- Ne conserver que les départements situés à New York
WHERE d.location = 'New York';

Utiliser des CTE (Common Table Expressions) ou des tables temporaires

Si vous travaillez avec de longues listes, envisagez d’utiliser des CTE pour stocker les valeurs avant de requêter. Cette méthode améliore les performances et la lisibilité.

-- Définir un CTE (Common Table Expression) pour stocker la liste des department_id situés à New York
WITH DepartmentList AS (
    SELECT department_id
    FROM departments
    WHERE location = 'New York'
)
-- Sélectionner employee_id et employee_name pour les employés appartenant aux départements listés dans le CTE
SELECT e.employee_id, e.employee_name
FROM employees e
-- Ne conserver que les employés dont le department_id figure dans la liste issue du CTE
WHERE e.department_id IN (SELECT department_id FROM DepartmentList);

Pour aller plus loin sur les techniques avancées de filtrage, suivez le parcours carrière Associate Data Analyst in SQL de DataCamp. Vous pouvez aussi consulter le cours Intermediate SQL Server, qui comprend un chapitre sur les expressions de table communes (CTE) et d’autres sujets avancés.

Conclusion

Maîtriser l’opérateur SQL IN est essentiel pour tout praticien de la donnée, car il permet de filtrer et de transformer les données pendant l’analyse. Pour renforcer votre pratique de IN en SQL, entraînez‑vous sur différents jeux de données.

Pour passer à un niveau intermédiaire, nous vous recommandons le cours Reporting in SQL pour explorer d’autres techniques de requêtage avancées. Par ailleurs, la SQL Associate Certification vous aidera à vous démarquer en attestant votre maîtrise pratique de SQL pour des analyses poussées.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Je crée des articles qui simplifient la science des données et l'analyse, en les rendant faciles à comprendre et accessibles.

Foire aux questions

Puis-je utiliser l’opérateur IN pour filtrer différents types de données ?

L’opérateur IN permet de filtrer différents types de données SQL, notamment les chaînes, les nombres et les dates.

Peut-on utiliser l’opérateur IN dans des sous‑requêtes ?

L’opérateur IN s’utilise dans des sous‑requêtes comme méthode avancée pour filtrer les données de la requête principale.

Quelles sont les alternatives à l’opérateur IN ?

Les meilleures alternatives à l’opérateur IN sont l’opérateur EXISTS, la clause JOIN et les CTE (Common Table Expressions).

Quelles bases de données sont compatibles avec l’opérateur IN ?

Les principales bases de données prennent en charge l’opérateur IN, notamment SQL Server, MySQL, PostgreSQL et Oracle.

Sujets
SQL
Analyse des données

Apprenez SQL avec DataCamp

Cours

Introduction au SQL

2 h
1.6M
Apprenez à créer et interroger des bases de données relationnelles avec SQL en deux heures seulement.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow