cours
Opérateur SQL NOT IN : Un guide complet pour les débutants
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 dansNOT 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.
Tableau d'inventaire
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
);
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')
);
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
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.
Commencez dès aujourd'hui votre voyage d'apprentissage de SQL !
cours
Manipulation de données en SQL
cours