Retour à la liste des articles Articles
8 minutes de lecture

Opérateur SQL IN

Pourquoi faut-il connaître l'opérateur SQL IN ? Découvrez ce que vous pouvez faire avec cet opérateur petit mais puissant.

L'opérateur IN est un outil fondamental en SQL, permettant aux analystes de données et aux développeurs de filtrer et d'extraire des sous-ensembles spécifiques de données des bases de données. Bien que son utilisation de base puisse sembler simple, la maîtrise des nuances et des applications avancées de l'opérateur SQL IN peut considérablement améliorer vos compétences SQL et conduire à des requêtes plus puissantes et optimisées.

Dans ce guide complet, nous allons nous plonger dans l'opérateur SQL IN, en couvrant sa syntaxe, ses cas d'utilisation, les considérations de performance et les meilleures pratiques.

Introduction à l'opérateur SQL IN

L'opérateur SQL IN est utilisé pour vérifier si une valeur correspond à n'importe quelle valeur d'une liste ou d'une sous-requête spécifiée. Il fournit un moyen concis de combiner plusieurs conditions en utilisant la logique OR sans avoir à écrire explicitement chaque condition séparément. Cela peut grandement simplifier vos requêtes SQL et améliorer leur lisibilité, en particulier lorsque vous avez affaire à un grand nombre de conditions.

Si vous cherchez un point de départ pour construire des bases solides en SQL, je vous recommande notre cours SQL pour les débutants . Il contient 129 exercices pratiques qui vous permettront de maîtriser les bases du langage SQL et de gagner en confiance. Si vous connaissez déjà les bases du langage SQL, jetez un coup d'œil à notre cours La pratique du SQL - il contient plus de 1 000 exercices pour vous aider à affiner vos compétences.

Utilisation de l'opérateur SQL IN

L'une des utilisations les plus courantes de l'opérateur SQL IN consiste à vérifier si une valeur correspond à n'importe quelle valeur d'une liste. En voici un exemple :

SELECT *
FROM employees
WHERE department_id IN (10, 20, 30);

Dans cette requête, l'opérateur SQL IN est utilisé pour récupérer toutes les lignes de la table employees dont la valeur department_id est 10, 20 ou 30.

Syntaxe de l'opérateur IN

L'opérateur SQL IN est un raccourci pour plusieurs conditions OR sur le même champ, ce qui rend la requête plus concise et plus lisible. Voici la syntaxe de base :

SELECT column1, column2, ...
FROM table_name
WHERE column_name IN (value1, value2, ...);

Utilisation de l'opérateur SQL NOT IN

L'opérateur SQL NOT IN est l'opposé de l'opérateur SQL IN. Il est utilisé pour extraire les enregistrements dont la valeur ne correspond à aucune valeur de la liste spécifiée. Voici un exemple :

SELECT *
FROM products
WHERE product_category NOT IN ('Electronics', 'Clothing');

Cette requête récupère toutes les lignes de la table products dont l'adresse product_category n'est ni "Électronique" ni "Vêtements".

Utilisation de IN avec SELECT

L'opérateur SQL IN peut également être utilisé avec une sous-requête, c'est-à-dire une requête imbriquée dans une autre requête. Cette combinaison puissante vous permet de filtrer les données sur la base des résultats d'une autre requête. En voici un exemple :

SELECT product_name, product_price
FROM products
WHERE product_id IN (
SELECT product_id FROM orders WHERE order_date >= '2023-01-01'
);

Dans cette requête, la sous-requête SELECT product_id FROM orders WHERE order_date >= '2023-01-01' récupère une liste de valeurs product_id pour les commandes passées à partir du 1er janvier 2023. La requête principale utilise ensuite l'opérateur IN pour récupérer les valeurs product_name et product_price pour tous les produits dont la valeur product_id figure dans la liste renvoyée par la sous-requête.

Ce n'est qu'un exemple de la façon dont vous pouvez utiliser une sous-requête dans un opérateur IN. Il existe de nombreux types de sous -requêtes que vous pouvez écrire en SQL, mais pour une meilleure compréhension, nous vous recommandons de jeter un coup d'œil à d 'autres exemples d'utilisation d'une sous-requête.

Utilisation de NOT IN avec SELECT

Comme dans l'exemple précédent, vous pouvez utiliser l'opérateur NOT IN avec une sous-requête pour extraire les enregistrements qui ne correspondent pas aux résultats de la sous-requête. Voici un exemple :

SELECT employee_name, department_name
FROM employees
WHERE department_id NOT IN (SELECT department_id
 FROM departments
 WHERE location = 'New York');

Cette requête extrait le nom de l'employé et le nom du service pour tous les employés qui ne font pas partie de services situés à New York. La sous-requête SELECT department_id FROM departments WHERE location = 'New York' récupère une liste de valeurs department_id pour les départements situés à New York. La requête principale utilise ensuite l'opérateur SQL NOT IN pour exclure les employés dont la valeur department_id figure dans la liste renvoyée par la sous-requête.

Exercice : Défi de l'opérateur IN

Maintenant que nous avons lu les différentes façons d'utiliser l'opérateur IN pour résoudre des problèmes SQL complexes, il est temps de mettre en pratique ce que nous avons appris.

Imaginez que vous travaillez avec une base de données qui stocke des informations sur des livres. La base de données contient une table nommée Books avec les colonnes suivantes : BookID, Title, AuthorID, et GenreID. Il y a une autre table nommée Genres avec les colonnes GenreID et GenreName. Voici un exemple de quelques lignes que ces tables contiendraient.

Le tableau Books table :

BookIDTitleAuthorIDGenreID
1The Hitchhiker's Guide to the Galaxy11
2Dune21
3The Lord of the Rings32
4The Da Vinci Code43
5Harry Potter and the Sorcerer’s Stone52
6The Girl on the Train63
7Pride and Prejudice74

La table : La table : La table : La table : La table : La table : La table : La table Genres table :

GenreIDGenreName
1Science Fiction
2Fantasy
3Mystery
4Romance
5Non-Fiction

Votre défi consiste à écrire une requête SQL qui sélectionne tous les titres de livres appartenant aux genres "Science-fiction", "Fantasy" ou "Mystère". (Supposez que vous ne connaissez pas encore les valeurs de GenreID pour ces genres).

Solution :

SELECT Title
FROM Books
WHERE GenreID IN (SELECT GenreID 
  FROM Genres 
  WHERE GenreName = 'Science Fiction' 
    OR GenreName = 'Fantasy' 
    OR GenreName = 'Mystery');

Explication :

Sélectionnez les titres de livres dans la table Books table. Filtrez les résultats à l'aide d'une clause WHERE et de l'opérateur IN afin d'inclure uniquement les lignes pour lesquelles GenreID est identique à GenreID dans le tableau Genres pour 'Science Fiction', 'Fantasy' ou 'Mystery'.

Vous pouvez également écrire une requête qui utilise deux opérateurs IN:

SELECT Title
FROM Books
WHERE GenreID IN (SELECT GenreID 
  FROM Genres 
  WHERE GenreName 
  IN ('Science Fiction','Fantasy','Mystery'));

Résultat :

Title
The Hitchhiker's Guide to the Galaxy
Dune
The Lord of the Rings
Harry Potter and the Sorcerer's Stone
The Da Vinci Code
The Girl on the Train

Exemples et cas d'utilisation IN avancés

Si l'utilisation de base de l'opérateur SQL IN est relativement simple, sa véritable puissance réside dans sa capacité à gérer des scénarios complexes et des cas d'utilisation avancés. Nous allons en explorer quelques-uns :

Sous-requêtes corrélées

Les sous-requêtes corrélées sont des sous-requêtes qui font référence à des colonnes de la requête externe. Elles vous permettent de filtrer les données sur la base de critères complexes impliquant plusieurs tables et conditions. En voici un exemple :

SELECT product_name, category_name
FROM products p
JOIN categories c ON p.category_id = c.category_id
WHERE p.product_id IN (SELECT product_id
  FROM order_items oi
  WHERE oi.order_id IN (SELECT order_id
FROM orders
WHERE customer_id = 1001));

Dans cette requête, la sous-requête intérieure récupère les valeurs order_id pour un client spécifique. La sous-requête centrale utilise ensuite ces valeurs order_id pour extraire les valeurs product_id correspondantes de la table order_items table. Enfin, la requête principale utilise l'opérateur SQL IN pour récupérer les valeurs product_name et category_name pour ces produits.

Les sous-requêtes corrélées ne sont qu'un des moyens avancés d'utiliser l'opérateur IN. Pour une compréhension approfondie de tous les types de sous-requêtes, nous vous recommandons ces 15 exercices pratiques sur les sous-requêtes.

Traitement des grandes listes de valeurs

Lorsque vous travaillez avec de grandes listes de valeurs, l'utilisation d'une sous-requête ou d'une table temporaire peut s'avérer plus efficace que l'énumération de toutes les valeurs dans la clause SQL IN. Cela peut améliorer les performances de la requête et réduire le risque d'atteindre les limites de longueur de la requête imposées par votre système de gestion de base de données. Voici un exemple :

-- Create a temporary table with the desired values
CREATE TEMPORARY TABLE temp_values (value INT);
INSERT INTO temp_values (value) VALUES (10), (20), (30), ...;
-- Use the temporary table with the SQL IN operator
SELECT *
FROM employees
WHERE department_id IN (SELECT value FROM temp_values);

Dans cet exemple, une table temporaire temp_values est créée et remplie avec les valeurs souhaitées. La requête principale utilise ensuite une sous-requête pour extraire ces valeurs de la table temporaire et filtrer la table en conséquence. employees tableau en conséquence.

Combinaison de IN avec d'autres opérateurs

L'opérateur IN peut être combiné avec d'autres opérateurs SQL, tels que AND et OR, pour créer des conditions de filtrage plus complexes. Cela vous permet de gérer des scénarios dans lesquels vous devez filtrer des données sur la base de plusieurs critères impliquant différents opérateurs. En voici un exemple :

SELECT *
FROM orders
WHERE order_date >= '2023-01-01'
  AND customer_id IN (SELECT customer_id
 FROM customers
 WHERE country = 'USA')
  AND total_amount > 1000;

Dans cette requête, IN est utilisé en combinaison avec AND pour filtrer les commandes en fonction de la date de commande, du pays du client et du montant total.

Il est maintenant temps de s'entraîner à utiliser SQL IN

L'opérateur IN est un outil puissant et polyvalent qui peut grandement simplifier vos tâches d'analyse de données et de création de rapports en SQL. En comprenant sa syntaxe, son utilisation avancée, les considérations de performance et les meilleures pratiques, vous pouvez utiliser IN pour filtrer et extraire efficacement les données pertinentes de vos bases de données tout en garantissant une performance et une maintenabilité optimales des requêtes.

Nous vous remercions d'avoir lu notre article ; nous espérons que vous avez apprécié de découvrir les puissantes fonctionnalités de l'opérateur SQL IN. Si vous débutez avec SQL, consultez notre cours interactif SQL pour les débutants. Si vous êtes un utilisateur chevronné de SQL et que vous recherchez une pratique concrète, consultez notre cours La pratique du SQL. Bon apprentissage !