Kurs
Im Bereich der Datenanalyse und -verwaltung ist SQL (Structured Query Language) ein wichtiges Werkzeug für den Zugriff auf und die Bearbeitung von Datenbanksystemen. Der NOT IN Operator ist ein leistungsfähiges Mittel zum Filtern von Datensätzen, mit dem du Zeilen ausschließen kannst, die mit einer bestimmten Liste von Werten übereinstimmen. Dieses Tutorial soll den NOT IN Operator für Anfänger und Datenpraktiker entmystifizieren, um Klarheit in seiner Anwendung zu schaffen und seine potenziellen Fallstricke zu verstehen.
Warum NICHT IN?
Die Entscheidung, sich auf den Operator NOT IN zu konzentrieren, beruht auf seiner Nützlichkeit in Datenausschluss-Szenarien. Egal, ob du Daten bereinigst, Berichte vorbereitest oder komplexe Analysen durchführst, es ist von unschätzbarem Wert zu wissen, wie du bestimmte Datenpunkte effektiv ausschließen kannst. Dieser Operator bietet eine einfache Syntax, hat aber einige Feinheiten, die die Leistung und Genauigkeit beeinträchtigen können.
Wir haben uns dazu entschlossen, NOT IN in die Tiefe zu gehen, um dir ein umfassendes Verständnis zu vermitteln, das dich in die Lage versetzt, es in deinen SQL-Abfragen effektiv einzusetzen.
Verstehen von SQL NOT IN
Die Grundlagen von NOT IN
Der NOT IN Operator wird in einer WHERE Klausel verwendet, um Zeilen auszuschließen, in denen der Wert einer bestimmten Spalte mit einem beliebigen Wert aus einer vorgegebenen Liste übereinstimmt. Die grundlegende Syntax lautet wie folgt:
SELECT column_names
FROM table_name
WHERE column_name NOT IN (value1, value2, ...);
Diese Syntax verdeutlicht die Rolle des Betreibers beim Filtern von Daten - ein wichtiger Schritt bei der Datenanalyse und dem Datenbankmanagement.
Praktische Anwendungen von NOT IN
Betrachte eine Datenbank mit einer Tabelle mit Kundeninformationen. Wenn du Kunden auswählen möchtest, die nicht aus bestimmten Städten stammen, ist NOT IN ein unschätzbares Werkzeug, mit dem du diese Städte ganz einfach aus deiner Ergebnismenge ausschließen kannst.
Schritt-für-Schritt NOT IN Beispiele
Beispiel 1: Bestimmte Werte ausschließen
Nehmen wir an, wir haben eine Tabelle namens Customers mit den Spalten CustomerID, CustomerName und City. Um Kunden zu finden, die nicht in "New York" oder "Los Angeles" wohnen, würde die Abfrage lauten:
|
CustomerlD |
Kundenname |
Stadt |
|
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 |
Kunden Tabelle
SELECT CustomerName, City
FROM Customers
WHERE City NOT IN ('New York', 'Los Angeles');
|
Kundenname |
Stadt |
|
Emily Jones |
Chicago |
|
Chris Brown |
Miami |
|
Alex Johnson |
San Francisco |
Beispiel 2: NOT IN mit Unterabfragen verwenden
NOT IN kann auch mit Unterabfragen arbeiten. Zum Beispiel, um Produkte zu finden, die noch nicht bestellt wurden:
|
ProductID |
ProductName |
|
1 |
Apfel |
|
2 |
Banana |
|
3 |
Orange |
|
4 |
Birne |
|
5 |
Traube |
Tabelle Produkte
|
OrderID |
ProductID |
|
101 |
2 |
|
102 |
4 |
|
103 |
2 |
|
104 |
3 |
Tabelle bestellen
SELECT ProductName
FROM Products
WHERE ProductID NOT IN (
SELECT ProductID
FROM Orders
);
|
ProductName |
|
Apfel |
|
Traube |
Häufige Fallstricke und wie du sie vermeidest
Umgang mit NULL-Werten
Ein häufiges Problem mit NOT IN tritt auf, wenn die Liste der Werte NULL enthält. Da NULL einen unbekannten Wert darstellt, wird ein Vergleich mit NULL unter Verwendung von NOT IN keine Zeilen zurückgeben, selbst wenn es Zeilen gibt, die logischerweise von der Liste ausgeschlossen werden sollten.
Um dies zu umgehen, stelle sicher, dass die Liste der Werte nicht NULL enthält oder verwende einen alternativen Ansatz wie NOT EXISTS.
Beispiel:
Angenommen, wir haben eine Tabelle Bestellungen mit einer Spalte CustomerID, von denen einige NULL sind, um Gastbestellungen darzustellen. Wenn du eine Abfrage durchführst, um Bestellungen zu finden, die nicht von bestimmten Kunden getätigt wurden, würde die Aufnahme von NULL in die Liste dazu führen, dass du keine Ergebnisse erhältst.
|
OrderID |
CustomerID |
|
101 |
3 |
|
102 |
4 |
|
103 |
2 |
|
104 |
|
|
106 |
1 |
Tabelle der Bestellungen
-- Assume we want to exclude CustomerID 1, 2, and unknown (NULL) customers
SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2, NULL);
Diese Abfrage würde keine Zeilen zurückgeben, was wahrscheinlich nicht das gewünschte Ergebnis ist.
Lösung: Um genaue Ergebnisse zu gewährleisten, vermeide es, NULL in die Liste für NOT IN aufzunehmen. Alternativ kannst du auch eine Kombination aus NOT IN für bekannte Werte und IS NOT NULL für den effektiven Umgang mit NULLen verwenden.
SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2) AND CustomerID IS NOT NULL;
|
OrderID |
|
101 |
|
102 |
Leistungsüberlegungen
Bei großen Datensätzen oder Unterabfragen kann NOT IN weniger effizient sein als Alternativen wie NOT EXISTS oder LEFT JOIN /IS NULL. Die Ineffizienz rührt daher, dass NOT IN jede Zeile in der Tabelle mit jedem Wert in der Liste vergleicht, was bei großen Datensätzen zu einer langsamen Leistung führen kann.
Alternativen zu SQL NOT IN
NOT EXISTS verwenden
NOT EXISTS wird oft gegenüber NOT IN empfohlen, wenn es um Unterabfragen geht, die NULL Werte zurückgeben könnten. Sie ist im Allgemeinen effizienter, weil sie anhält, sobald sie eine Übereinstimmung findet.
Beispiel:
Um Produkte zu finden, die noch nicht bestellt wurden, verwende NOT EXISTS:
SELECT ProductName
FROM Products p
WHERE NOT EXISTS (
SELECT 1
FROM Orders o
WHERE o.ProductID = p.ProductID
);
|
ProductName |
|
Apfel |
|
Traube |
Diese Abfrage prüft, ob ein Produkt in der Tabelle "Bestellungen" nicht vorhanden ist, was effizienter sein kann als ein Vergleich mit einer potenziell großen Liste von IDs mit NOT IN.
LEFT JOIN / IST NULL
Eine weitere effiziente Alternative zum Ausschluss von Zeilen ist die Verwendung einer LEFT JOIN in Kombination mit einer WHERE... IS NULL Klausel. Diese Methode ist besonders effektiv bei großen Datensätzen.
Beispiel:
Um das gleiche Ziel zu erreichen, Produkte zu finden, die nicht bestellt wurden:
SELECT p.ProductName
FROM Products p
LEFT JOIN Orders o ON p.ProductID = o.ProductID
WHERE o.ProductID IS NULL;
|
ProductName |
|
Apfel |
|
Traube |
Diese Methode nutzt LEFT JOIN, um alle Produkte und alle dazugehörigen Bestellungen einzuschließen, und filtert dann die Produkte heraus, für die es Bestellungen über WHERE o.ProductID IS NULL gibt, um sie effektiv auszuschließen.
Best Practices für die Verwendung von NOT IN
- Überprüfe die Liste auf
NULLWerte: Stelle sicher, dass die inNOT INverwendete Liste keine NULL-Werte enthält, um unerwartete Ergebnisse zu vermeiden. - Berücksichtige die Größe des Datensatzes: Bei großen Datensätzen oder Unterabfragen solltest du prüfen, ob Alternativen wie
NOT EXISTSnicht eine bessere Leistung bieten. - Indizierung: Achte darauf, dass die in der
NOT INKlausel verwendeten Spalten nach Möglichkeit indiziert sind, um die Abfrageleistung zu verbessern.
Verwendung von NOT IN im Real Life Data Project
In der Datenanalyse wird der SQL-Befehl "Not IN" häufig verwendet, um bestimmte Daten abzurufen. In diesem Abschnitt arbeiten wir mit einer Buchhandelsdatenbank, die den Überblick über den Bestand (im Laden verfügbare Bücher) und die Verkäufe (verkaufte Bücher) behält. Unser Ziel ist es, herauszufinden, welche Bücher noch nie verkauft wurden.
Wir haben zwei Tabellen:
- Inventar: zum Speichern von Informationen über Bücher in der Buchhandlung.
- Verkäufe: zum Speichern von Aufzeichnungen über verkaufte Bücher.

Tabelle zur Bestandsaufnahme

Tabelle der Verkäufe
Jetzt wollen wir herausfinden, welche Bücher noch nie verkauft wurden.
SELECT Title, Author
FROM Inventory
WHERE BookID NOT IN (
SELECT BookID
FROM Sales
);

Als Nächstes wollen wir die Bücher in unserem Bestand ermitteln, die im letzten Monat nicht verkauft wurden, wobei wir davon ausgehen, dass heute der 7. Februar 2024 ist. Dabei wird das SaleDate in der Tabelle Sales mit unserem aktuellen Datum verglichen.
SELECT Title, Author
FROM Inventory
WHERE BookID NOT IN (
SELECT BookID
FROM Sales
WHERE SaleDate >= date('now', '-1 month')
);

Fazit
Der NOT IN Operator ist ein vielseitiges Werkzeug in SQL, um bestimmte Werte aus deinen Abfrageergebnissen auszuschließen. Wenn du die Syntax, die praktischen Anwendungen und die möglichen Fallstricke kennst, kannst du diesen Operator bei deinen Datenmanipulationsaufgaben effektiv einsetzen.
Denke daran, die Werte von NULL und die Größe des Datensatzes zu berücksichtigen, um die Leistung und Genauigkeit deiner Abfragen zu optimieren. Wenn du dich mit NOT IN vertraut machst, wirst du feststellen, dass es eine unschätzbare Ergänzung deines SQL-Werkzeugkastens ist, mit der du deine Daten genauer und effizienter analysieren und verwalten kannst.
Mehr über NOT IN und NOT EXISTS erfährst du in unserem Kurs " Verbesserung der Abfrageleistung in SQL Server " und über SQL-Operatoren und vieles mehr in unseren Lernpfaden "SQL-Grundlagen" und " SQL-Grundlagen".
Werde Dateningenieur

Als zertifizierter Data Scientist ist es meine Leidenschaft, modernste Technologien zu nutzen, um innovative Machine Learning-Anwendungen zu entwickeln. Mit meinem fundierten Hintergrund in den Bereichen Spracherkennung, Datenanalyse und Reporting, MLOps, KI und NLP habe ich meine Fähigkeiten bei der Entwicklung intelligenter Systeme verfeinert, die wirklich etwas bewirken können. Neben meinem technischen Fachwissen bin ich auch ein geschickter Kommunikator mit dem Talent, komplexe Konzepte in eine klare und prägnante Sprache zu fassen. Das hat dazu geführt, dass ich ein gefragter Blogger zum Thema Datenwissenschaft geworden bin und meine Erkenntnisse und Erfahrungen mit einer wachsenden Gemeinschaft von Datenexperten teile. Zurzeit konzentriere ich mich auf die Erstellung und Bearbeitung von Inhalten und arbeite mit großen Sprachmodellen, um aussagekräftige und ansprechende Inhalte zu entwickeln, die sowohl Unternehmen als auch Privatpersonen helfen, das Beste aus ihren Daten zu machen.
