Ga naar hoofdinhoud

SQL NOT IN-operator: een uitgebreide gids voor beginners

Beheers de NOT IN-operator van SQL met deze beginnersgids. Leer gegevens effectief filteren, veelvoorkomende valkuilen vermijden en efficiënte alternatieven verkennen
· 5 min lezen

Verken met AI

In de wereld van data-analyse en -beheer is SQL (Structured Query Language) een essentieel hulpmiddel voor het benaderen en manipuleren van databasesystemen. Onder de vele functies is de NOT IN-operator een krachtig middel om datasets te filteren, waarmee je rijen kunt uitsluiten die overeenkomen met een opgegeven lijst met waarden. Deze tutorial is bedoeld om de NOT IN-operator te ontrafelen voor beginners en dataprofessionals, zodat de toepassing helder is en de mogelijke valkuilen duidelijk worden.

Waarom NOT IN?

De focus op de NOT IN-operator komt voort uit de bruikbaarheid in scenario's waar je data wilt uitsluiten. Of je nu data opschoont, rapporten voorbereidt of complexe analyses uitvoert: weten hoe je specifieke datapunten effectief uitsluit, is van onschatbare waarde. Deze operator biedt een eenvoudige syntaxis, maar kent nuances die invloed kunnen hebben op performance en nauwkeurigheid.

We gaan NOT IN uitgebreid verkennen om je een volledig begrip te geven waarmee je deze operator effectief kunt inzetten in je SQL-queries.

SQL NOT IN begrijpen

De basis van NOT IN

De NOT IN-operator wordt gebruikt binnen een WHERE-clausule om rijen uit te sluiten waarbij de waarde van een bepaalde kolom overeenkomt met een opgegeven lijst met waarden. De basis-syntaxis is als volgt:

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

Deze syntaxis benadrukt de rol van de operator bij het filteren van data—een cruciale stap in data-analyse en databasebeheer.

Praktische toepassingen van NOT IN

Stel, je hebt een database met een tabel met klantinformatie. Als je klanten wilt selecteren die niet uit specifieke steden komen, is NOT IN een waardevol hulpmiddel waarmee je die steden eenvoudig uit je resultaten kunt uitsluiten.

Stap-voor-stap NOT IN-voorbeelden

Voorbeeld 1: Specifieke waarden uitsluiten

Stel, we hebben een tabel Customers met kolommen CustomerID, CustomerName en City. Om klanten te vinden die niet in 'New York' of 'Los Angeles' zitten, gebruik je deze query:

CustomerlD

CustomerName

City

1

John Doe

New York

2

Jane Smith

Los Angeles

3

Emily Jones

Chicago

4

Chris Brown

Miami

5

Alex Johnson

San Francisco

6

Jessica White

New York

Customers-tabel

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

CustomerName

City

Emily Jones

Chicago

Chris Brown

Miami

Alex Johnson

San Francisco

Voorbeeld 2: NOT IN met subqueries

NOT IN werkt ook met subqueries. Bijvoorbeeld om producten te vinden die niet besteld zijn:

ProductID

ProductName

1

Apple

2

Banana

3

Orange

4

Pear

5

Grape

Tabel Products

OrderID

ProductID

101

2

102

4

103

2

104

3

Tabel Orders

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

ProductName

Apple

Grape

Veelvoorkomende valkuilen en hoe je ze vermijdt

Met NULL-waarden omgaan

Een veelvoorkomend probleem met NOT IN ontstaat wanneer de lijst met waarden NULL bevat. Omdat NULL een onbekende waarde vertegenwoordigt, zal elke vergelijking met NULL via NOT IN geen rijen retourneren, zelfs niet als er rijen zijn die logisch zouden moeten worden uitgesloten.

Om dit te omzeilen, zorg je ervoor dat de lijst met waarden geen NULL bevat of gebruik je een alternatieve aanpak zoals NOT EXISTS.

Voorbeeld:

Stel dat we een tabel Orders hebben met een kolom CustomerID, waarvan sommige NULL zijn om gastbestellingen aan te duiden. Als je een query uitvoert om bestellingen te vinden die niet door bepaalde klanten zijn gedaan, zal het opnemen van NULL in de lijst ervoor zorgen dat er geen resultaten worden teruggegeven.

OrderID

CustomerID

101

3

102

4

103

2

104

 

106

1

Orders-tabel

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

Deze query retourneert geen rijen, wat waarschijnlijk niet de bedoeling is.

Oplossing: Neem geen NULL op in de lijst voor NOT IN om correcte resultaten te garanderen. Of gebruik een combinatie van NOT IN voor bekende waarden en IS NOT NULL om NULL-waarden goed af te handelen.

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

OrderID

101

102

Prestatieoverwegingen

Voor grote datasets of subqueries kan NOT IN minder efficiënt zijn dan alternatieven zoals NOT EXISTS of LEFT JOIN /IS NULL. De inefficiëntie komt voort uit hoe NOT IN elke rij in de tabel vergelijkt met elke waarde in de lijst, wat bij grote datasets tot trage prestaties kan leiden.

Alternatieven voor SQL NOT IN

NOT EXISTS gebruiken

NOT EXISTS wordt vaak aanbevolen boven NOT IN wanneer je werkt met subqueries die NULL-waarden kunnen teruggeven. Het is over het algemeen efficiënter omdat het stopt zodra er een match wordt gevonden.

Voorbeeld:

Om producten te vinden die niet besteld zijn, met NOT EXISTS:

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

ProductName

Apple

Grape

Deze query controleert of een product niet voorkomt in de orders-tabel, wat efficiënter kan zijn dan vergelijken met een mogelijk grote lijst met ID's via NOT IN.

LEFT JOIN / IS NULL

Een ander efficiënt alternatief om rijen uit te sluiten is een LEFT JOIN in combinatie met een WHERE ... IS NULL-clausule. Deze methode is vooral effectief bij grote datasets.

Voorbeeld:

Om hetzelfde doel te bereiken—producten vinden die niet zijn besteld:

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

ProductName

Apple

Grape

Deze methode gebruikt de LEFT JOIN om alle producten en eventuele bijbehorende orders op te nemen, en filtert vervolgens die producten weg die orders hebben met WHERE o.ProductID IS NULL, zodat ze effectief worden uitgesloten.

Best practices voor het gebruik van NOT IN

  • Controleer de lijst op NULL-waarden: Zorg dat de lijst die in NOT IN wordt gebruikt geen NULL-waarden bevat om onverwachte resultaten te voorkomen.
  • Houd rekening met de datasetgrootte: Evalueer bij grote datasets of subqueries of alternatieven zoals NOT EXISTS betere performance bieden.
  • Indexering: Zorg dat de kolommen die in de NOT IN-clausule worden gebruikt waar mogelijk geïndexeerd zijn om de query-prestaties te verbeteren.

NOT IN gebruiken in een echt dataproject

In data-analyse wordt de SQL-opdracht "Not IN" vaak gebruikt om specifieke gegevens op te halen. In deze sectie werken we met een boekhandeldatabase die de voorraad (boeken in de winkel) en verkopen (verkochte boeken) bijhoudt. Ons doel is te achterhalen welke boeken nog nooit zijn verkocht.

We hebben twee tabellen:

  • Inventory: voor informatie over boeken in de boekhandel.
  • Sales: voor records van boeken die zijn verkocht.

image4.png

Tabel Inventory

image3.png

Tabel Sales

Nu willen we uitvinden welke boeken nog nooit zijn verkocht.

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

image1.png

Vervolgens willen we boeken in onze voorraad identificeren die in de afgelopen maand niet zijn verkocht, ervan uitgaande dat het vandaag 7 februari 2024 is. Dit houdt in dat we de SaleDate in de Sales-tabel vergelijken met onze huidige datum.

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

image2.png

Conclusie

De NOT IN-operator is een veelzijdig hulpmiddel in SQL om specifieke waarden uit je queryresultaten uit te sluiten. Door de syntaxis, praktische toepassingen en mogelijke valkuilen te begrijpen, kun je deze operator effectief gebruiken bij je datamanipulatietaken.

Denk aan NULL-waarden en de grootte van je dataset om de prestaties en nauwkeurigheid van je queries te optimaliseren. Naarmate je vertrouwder raakt met NOT IN, zal het een onmisbaar onderdeel van je SQL-gereedschapskist worden, waarmee je preciezere en efficiëntere data-analyse en -beheer mogelijk maakt.

Je kunt meer leren over NOT IN en NOT EXISTS in onze cursus Improving Query Performance in SQL Server en SQL-operators en veel meer verkennen in onze SQL Basics Cheat Sheet en de SQL Fundamentals skill track.

Abid Ali Awan

Auteur

Abid Ali Awan

Als gecertificeerd data scientist haal ik met passie het maximale uit de nieuwste technologie om innovatieve machinelearning-toepassingen te bouwen. Met een sterke achtergrond in spraakherkenning, data-analyse en -rapportage, MLOps, conversationele AI en NLP heb ik mijn vaardigheden aangescherpt in het ontwikkelen van intelligente systemen die echt impact maken. Naast mijn technische expertise ben ik ook een sterke communicator met een talent om complexe concepten terug te brengen tot heldere, beknopte taal. Daardoor ben ik uitgegroeid tot een veelgelezen blogger over data science, waar ik mijn inzichten en ervaringen deel met een groeiende community van data-professionals. Op dit moment richt ik me op contentcreatie en redactie, waarbij ik met large language models werk aan krachtige en aansprekende content die zowel bedrijven als individuen helpt het beste uit hun data te halen.

Onderwerpen

Gerelateerd