Accéder au contenu principal

Opérateur SQL NOT IN : Un guide complet pour les débutants

Maîtrisez l'opérateur NOT IN de SQL grâce à ce guide pour débutants. Apprenez à filtrer efficacement les données, à éviter les pièges les plus courants et à explorer des alternatives efficaces.
Actualisé 14 nov. 2024  · 5 min de lecture

Dans le domaine de l'analyse et de la gestion des données, SQL (Structured Query Language) est un outil essentiel pour accéder aux systèmes de bases de données et les manipuler. Parmi ses nombreuses fonctions, l'opérateur NOT IN est un moyen puissant de filtrer les ensembles de données, permettant aux utilisateurs d'exclure les lignes qui correspondent à une liste de valeurs spécifiée. Ce tutoriel a pour but de démystifier l'opérateur NOT IN pour les débutants et les praticiens des données, d'assurer la clarté de son application et de comprendre ses pièges potentiels.

Pourquoi PAS DANS ?

Le choix de l'opérateur NOT IN s'explique par son utilité dans les scénarios d'exclusion de données. Que vous nettoyiez des données, prépariez des rapports ou réalisiez des analyses complexes, savoir comment exclure efficacement des points de données spécifiques est inestimable. Cet opérateur offre une syntaxe simple mais comporte des nuances qui peuvent affecter les performances et la précision.

Si nous avons décidé d'explorer NOT IN en profondeur, c'est pour vous apporter une compréhension globale qui vous permettra de l'utiliser efficacement dans vos requêtes SQL.

Comprendre SQL NOT IN

Les bases du NOT IN

L'opérateur NOT IN est utilisé dans une clause WHERE pour exclure les lignes dont la valeur d'une colonne spécifiée correspond à l'une des valeurs d'une liste donnée. Sa syntaxe de base est la suivante :

SELECT column_names
FROM table_name
WHERE column_name NOT IN (value1, value2, ...);

Cette syntaxe met en évidence le rôle de l'opérateur dans le filtrage des données, une étape essentielle dans l'analyse des données et la gestion des bases de données.

Applications pratiques de NOT IN

Considérons une base de données contenant un tableau d'informations sur les clients. Si vous souhaitez sélectionner des clients qui ne sont pas originaires de certaines villes, NOT IN devient un outil précieux, vous permettant d'exclure facilement ces villes de votre ensemble de résultats.

Exemples de NOT IN étape par étape

Exemple 1 : Exclusion de valeurs spécifiques

Supposons que nous ayons un tableau nommé Customers avec les colonnes CustomerID, CustomerName, et City. Pour trouver des clients qui ne sont pas situés à "New York" ou à "Los Angeles", la requête serait la suivante :

CustomerlD

Nom du client

Ville

1

John Doe

New York (en anglais)

2

Jane Smith

Los Angeles

3

Emily Jones

Chicago (en anglais)

4

Chris Brown

Miami

5

Alex Johnson

San Francisco

6

Jessica White

New York (en anglais)

Tableau des clients

SELECT CustomerName, City
FROM Customers
WHERE City NOT IN ('New York', 'Los Angeles');

Nom du client

Ville

Emily Jones

Chicago (en anglais)

Chris Brown

Miami

Alex Johnson

San Francisco

Exemple 2 : Utilisation de NOT IN avec des sous-requêtes

NOT IN peut également fonctionner avec des sous-requêtes. Par exemple, pour trouver des produits qui n'ont pas été commandés :

ProductID

Nom du produit

1

Pomme

2

Banane

3

Orange

4

Poire

5

Raisin

Produits du tableau

OrderID

ProductID

101

2

102

4

103

2

104

3

Tableau de commande

SELECT ProductName
FROM Products
WHERE ProductID NOT IN (
  SELECT ProductID
  FROM Orders
);

Nom du produit

Pomme

Raisin

Les pièges les plus courants et comment les éviter

Traitement des valeurs NULL

Un problème courant avec NOT IN se pose lorsque la liste des valeurs contient NULL. Comme NULL représente une valeur inconnue, toute comparaison avec NULL à l'aide de NOT IN ne renverra aucune ligne, même s'il existe des lignes qui devraient logiquement être exclues de la liste.

Pour contourner ce problème, assurez-vous que la liste des valeurs ne contient pas NULL ou utilisez une autre approche telle que NOT EXISTS.

Exemple :

Supposons que nous ayons un tableau Commandes avec une colonne CustomerID, dont certaines sont NULL pour représenter les commandes d'invités. Si vous exécutez une requête pour trouver les commandes qui n'ont pas été passées par certains clients, l'inclusion de NULL dans la liste n'entraînerait aucun résultat.

OrderID

CustomerID

101

3

102

4

103

2

104

 

106

1

Tableau des commandes

-- Assume we want to exclude CustomerID 1, 2, and unknown (NULL) customers
SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2, NULL);

Cette requête ne renverrait aucune ligne, ce qui n'est probablement pas le résultat escompté.

Solution : Pour garantir des résultats précis, évitez d'inclure NULL dans la liste de NOT IN. Vous pouvez également utiliser une combinaison de NOT IN pour les valeurs connues et de IS NOT NULL pour gérer efficacement les NULL.

SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2) AND CustomerID IS NOT NULL;

OrderID

101

102

Considérations sur les performances

Pour les grands ensembles de données ou les sous-requêtes, NOT IN peut être moins efficace que les alternatives telles que NOT EXISTS ou LEFT JOIN /IS NULL. L'inefficacité provient de la façon dont NOT IN compare chaque ligne du tableau à chaque valeur de la liste, ce qui peut entraîner des lenteurs sur les grands ensembles de données.

Alternatives à SQL NOT IN

Utilisation de NOT EXISTS

NOT EXISTS est souvent préféré à NOT IN lorsqu'il s'agit de sous-requêtes susceptibles de renvoyer des valeurs NULL. Il est généralement plus efficace car il s'arrête dès qu'il trouve une correspondance.

Exemple :

Pour trouver des produits qui n'ont pas été commandés, utilisez NOT EXISTS :

SELECT ProductName
FROM Products p
WHERE NOT EXISTS (
  SELECT 1
  FROM Orders o
  WHERE o.ProductID = p.ProductID
);

Nom du produit

Pomme

Raisin

Cette requête vérifie l'inexistence d'un produit dans le tableau des commandes, ce qui peut s'avérer plus efficace qu'une comparaison avec une liste potentiellement importante d'ID à l'adresse NOT IN.

JOINTURE GAUCHE / EST NUL

Une autre solution efficace pour exclure des lignes consiste à utiliser une clause LEFT JOIN combinée à une clause WHERE... IS NULL. Cette méthode est particulièrement efficace pour les grands ensembles de données.

Exemple :

Pour atteindre le même objectif de trouver des produits qui n'ont pas été commandés :

SELECT p.ProductName
FROM Products p
LEFT JOIN Orders o ON p.ProductID = o.ProductID
WHERE o.ProductID IS NULL;

Nom du produit

Pomme

Raisin

Cette méthode utilise le site LEFT JOIN pour inclure tous les produits et toutes les commandes correspondantes, puis filtre les produits dont les commandes utilisent le site WHERE o.ProductID IS NULL, ce qui les exclut.

Bonnes pratiques pour l'utilisation de NOT IN

  • Vérifiez la liste pour les valeurs NULL : Assurez-vous que la liste utilisée dans NOT IN ne contient pas de valeurs NULL afin d'éviter des résultats inattendus.
  • Tenez compte de la taille de l'ensemble des données : Pour les grands ensembles de données ou les sous-requêtes, évaluez si des alternatives telles que NOT EXISTS peuvent offrir de meilleures performances.
  • Indexation : Veillez à ce que les colonnes utilisées dans la clause NOT IN soient indexées, si possible, afin d'améliorer les performances de la requête.

Utilisation de NOT IN dans un projet de données réelles

Dans l'analyse des données, la commande SQL "Not IN" est couramment utilisée pour récupérer des données spécifiques. Dans cette section, nous travaillerons avec la base de données d'une librairie qui suit son inventaire (livres disponibles dans le magasin) et ses ventes (livres vendus). Notre objectif est d'identifier les livres qui n'ont jamais été vendus.

Nous avons deux tableaux :

  • Inventaire : pour stocker des informations sur les livres dans la librairie.
  • Ventes : pour enregistrer les livres qui ont été vendus.

image4.png

Tableau d'inventaire

image3.png

Tableau des ventes

Nous voulons maintenant savoir quels sont les livres qui n'ont jamais été vendus.

SELECT Title, Author 
FROM Inventory 
WHERE BookID NOT IN (
    SELECT BookID 
    FROM Sales
);

image1.png

Ensuite, nous voulons identifier les livres de notre inventaire qui n'ont pas été vendus au cours du dernier mois, en supposant que nous sommes aujourd'hui le 7 février 2024. Il s'agit de vérifier la date de vente (SaleDate) dans le tableau des ventes par rapport à la date du jour.

SELECT Title, Author 
FROM Inventory 
WHERE BookID NOT IN (
    SELECT BookID 
    FROM Sales
    WHERE SaleDate >= date('now', '-1 month')
);

image2.png

Conclusion

L'opérateur NOT IN est un outil polyvalent de SQL qui permet d'exclure des valeurs spécifiques des résultats de votre requête. En comprenant sa syntaxe, ses applications pratiques et ses pièges potentiels, vous pourrez utiliser efficacement cet opérateur dans vos tâches de manipulation de données.

N'oubliez pas de tenir compte des valeurs de NULL et de la taille du jeu de données pour optimiser les performances et la précision de vos requêtes. Au fur et à mesure que vous vous familiariserez avec NOT IN, vous découvrirez qu'il s'agit d'un complément inestimable à votre boîte à outils SQL, permettant une analyse et une gestion des données plus précises et plus efficaces.

Vous pouvez en apprendre davantage sur NOT IN et NOT EXISTS dans notre cours Améliorer les performances des requêtes dans SQL Server et explorer les opérateurs SQL et bien d'autres choses encore dans notre aide-mémoire sur les bases de SQL et notre piste de compétences sur les principes fondamentaux de SQL.

Devenez ingénieur en données

Faites la preuve de vos compétences en tant qu'ingénieur en données prêt à l'emploi.
Accélérer Ma Carrière Dans Les Données

Photo of Abid Ali Awan
Author
Abid Ali Awan
LinkedIn
Twitter

En tant que data scientist certifié, je suis passionné par l'utilisation des technologies de pointe pour créer des applications innovantes d'apprentissage automatique. Avec une solide expérience en reconnaissance vocale, en analyse de données et en reporting, en MLOps, en IA conversationnelle et en NLP, j'ai affiné mes compétences dans le développement de systèmes intelligents qui peuvent avoir un impact réel. En plus de mon expertise technique, je suis également un communicateur compétent, doué pour distiller des concepts complexes dans un langage clair et concis. En conséquence, je suis devenu un blogueur recherché dans le domaine de la science des données, partageant mes idées et mes expériences avec une communauté grandissante de professionnels des données. Actuellement, je me concentre sur la création et l'édition de contenu, en travaillant avec de grands modèles linguistiques pour développer un contenu puissant et attrayant qui peut aider les entreprises et les particuliers à tirer le meilleur parti de leurs données.

Sujets

Commencez dès aujourd'hui votre voyage d'apprentissage de SQL !

Certification disponible

cours

SQL intermédiaire

4 hr
210.1K
Accompagné à chaque étape de requêtes pratiques, ce cours vous enseigne tout ce que vous devez savoir pour analyser des données en utilisant votre propre code SQL dès aujourd'hui !
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow