Zurück zur Artikelliste Artikel
8 Leseminuten

SQL IN-Operator

Warum müssen Sie SQL IN KENNEN? Finden Sie heraus, was Sie mit diesem kleinen, aber leistungsstarken Operator tun können.

Der Operator IN ist ein grundlegendes Werkzeug in SQL, mit dem Datenanalysten und Entwickler bestimmte Teilmengen von Daten aus Datenbanken filtern und abrufen können. Auch wenn seine grundlegende Verwendung einfach erscheint, kann die Beherrschung der Feinheiten und fortgeschrittenen Anwendungen des SQL-Operators IN Ihre SQL-Kenntnisse erheblich verbessern und zu leistungsfähigeren und optimierten Abfragen führen.

In diesem umfassenden Leitfaden wird der SQL IN-Operator eingehend behandelt, wobei seine Syntax, Anwendungsfälle, Leistungsüberlegungen und Best Practices behandelt werden.

Einführung in den SQL IN-Operator

Der SQL IN Operator wird verwendet, um zu prüfen, ob ein Wert mit einem beliebigen Wert in einer angegebenen Liste oder Unterabfrage übereinstimmt. Er bietet eine prägnante Möglichkeit, mehrere Bedingungen mit ODER-Logik zu kombinieren, ohne jede Bedingung explizit ausschreiben zu müssen. Dies kann Ihre SQL-Abfragen erheblich vereinfachen und ihre Lesbarkeit verbessern, vor allem, wenn Sie mit einer großen Anzahl von Bedingungen zu tun haben.

Wenn Sie nach einem Ausgangspunkt suchen, um solide SQL-Grundlagen aufzubauen, empfehle ich Ihnen unseren Kurs SQL für Anfänger . Er enthält 129 praktische Übungen, mit denen Sie die Grundlagen von SQL beherrschen und Ihr Selbstvertrauen aufbauen können. Wenn Sie die Grundlagen von SQL bereits beherrschen, sollten Sie sich unseren SQL-Praxis Kurs ansehen - er enthält über 1.000 Übungen, mit denen Sie Ihre Kenntnisse vertiefen können.

Verwendung des SQL IN-Operators

Einer der häufigsten Anwendungsfälle für die Verwendung von SQL IN ist die Überprüfung, ob ein Wert mit einem Wert in einer Liste übereinstimmt. Hier ist ein Beispiel:

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

In dieser Abfrage wird der Operator SQL IN verwendet, um alle Zeilen aus der Tabelle employees Tabelle abzurufen, in der department_id 10, 20 oder 30 ist.

Syntax des IN-Operators

Der SQL-Operator IN dient als Abkürzung für mehrere ODER-Bedingungen für dasselbe Feld und macht die Abfrage übersichtlicher und lesbarer. Hier ist die grundlegende Syntax:

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

Verwendung des SQL NOT IN-Operators

Der SQL NOT IN Operator ist das Gegenteil des SQL IN Operators. Er wird verwendet, um Datensätze abzurufen, deren Wert nicht mit einem Wert in der angegebenen Liste übereinstimmt. Hier ist ein Beispiel:

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

Diese Abfrage ruft alle Zeilen aus der Tabelle products ab, deren product_category nicht 'Elektronik' oder 'Kleidung' ist.

Verwendung von IN mit SELECT

Der SQL-Operator IN kann auch in Verbindung mit einer Unterabfrage verwendet werden, d. h. einer Abfrage, die in eine andere Abfrage eingebettet ist. Diese leistungsstarke Kombination ermöglicht es Ihnen, Daten auf der Grundlage der Ergebnisse einer anderen Abfrage zu filtern. Hier ist ein Beispiel:

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

In dieser Abfrage ruft die Unterabfrage SELECT product_id FROM orders WHERE order_date >= '2023-01-01' eine Liste von product_id Werten für Bestellungen ab, die am oder nach dem 1. Januar 2023 aufgegeben wurden. Die Hauptabfrage verwendet dann den Operator IN, um die product_name und product_price für alle Produkte abzurufen, deren product_id in der von der Unterabfrage zurückgegebenen Liste enthalten ist.

Dies ist nur ein Beispiel dafür, wie Sie eine Unterabfrage in einem IN Operator verwenden können. Es gibt zahlreiche Arten von Unterabfragen, die Sie in SQL schreiben können, aber zum besseren Verständnis empfehlen wir Ihnen, einen Blick auf weitere Beispiele für die Verwendung einer Unterabfrage zu werfen.

Verwendung von NOT IN mit SELECT

Wie im vorherigen Beispiel können Sie den Operator NOT IN mit einer Unterabfrage verwenden, um Datensätze abzurufen, die nicht mit den Ergebnissen der Unterabfrage übereinstimmen. Hier ist ein Beispiel:

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

Diese Abfrage ruft den Mitarbeiternamen und den Abteilungsnamen für alle Mitarbeiter ab, die nicht in Abteilungen in New York tätig sind. Die Unterabfrage SELECT department_id FROM departments WHERE location = 'New York' ruft eine Liste von department_id Werten für Abteilungen in New York ab. Die Hauptabfrage verwendet dann den SQL-Operator NOT IN, um Mitarbeiter auszuschließen, deren department_id in der von der Unterabfrage zurückgegebenen Liste enthalten ist.

Übung: IN-Operator-Herausforderung

Nachdem wir nun über die verschiedenen Möglichkeiten gelesen haben, wie der IN Operator zur Lösung komplexer SQL-Probleme verwendet werden kann, ist es an der Zeit, das Gelernte zu üben.

Stellen Sie sich vor, Sie arbeiten mit einer Datenbank, die Informationen über Bücher speichert. Die Datenbank hat eine Tabelle namens Books mit den folgenden Spalten: BookID, Title, AuthorID, und GenreID. Es gibt eine weitere Tabelle mit dem Namen Genres und den Spalten GenreID und GenreName. Hier ein Beispiel für einige Zeilen, die diese Tabellen enthalten würden.

Die Tabelle Books Tabelle:

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

Die Genres Tabelle:

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

Ihre Aufgabe besteht darin, eine SQL-Abfrage zu schreiben, die alle Buchtitel auswählt, die zu den Genres "Science Fiction", "Fantasy" oder "Mystery" gehören. (Gehen Sie davon aus, dass Sie die GenreID Werte für diese Genres noch nicht kennen).

Lösung:

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

Erläuterung:

Wählen Sie Buchtitel aus der Tabelle Books Tabelle. Filtern Sie die Ergebnisse mit einer WHERE -Klausel mit dem IN -Operator, um nur Zeilen einzuschließen, bei denen der GenreID -Wert mit dem GenreID -Wert in der Tabelle Genres entweder für 'Science Fiction', 'Fantasy' oder 'Mystery'.

Alternativ können Sie auch eine Abfrage schreiben, die zwei IN Operatoren verwendet:

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

Ergebnis:

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

Erweiterte IN-Beispiele und Anwendungsfälle

Während die grundlegende Verwendung des SQL-Operators IN relativ einfach ist, liegt seine wahre Stärke in seiner Fähigkeit, komplexe Szenarien und erweiterte Anwendungsfälle zu behandeln. Lassen Sie uns einige davon untersuchen:

Korrelierte Unterabfragen

Korrelierte Unterabfragen sind Unterabfragen, die auf Spalten aus der äußeren Abfrage verweisen. So können Sie Daten nach komplexen Kriterien filtern, die mehrere Tabellen und Bedingungen umfassen. Hier ist ein Beispiel:

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));

In dieser Abfrage ruft die innerste Subquery die order_id Werte für einen bestimmten Kunden ab. Die mittlere Unterabfrage verwendet dann diese order_id Werte, um die entsprechenden product_id Werte aus der order_items Tabelle. Schließlich verwendet die Hauptabfrage den SQL-Operator IN, um die Werte product_name und category_name für diese Produkte abzurufen.

Korrelierte Unterabfragen sind nur eine der fortgeschrittenen Möglichkeiten, wie Sie den Operator IN verwenden können. Um ein tieferes Verständnis aller Arten von Unterabfragen zu erlangen, empfehlen wir diese 15 Unterabfrage-Übungen.

Umgang mit großen Wertelisten

Wenn Sie mit großen Wertelisten arbeiten, kann die Verwendung einer Unterabfrage oder einer temporären Tabelle effizienter sein als die Auflistung aller Werte in der SQL-Klausel IN. Dies kann die Abfrageleistung verbessern und das Risiko verringern, dass die Abfragelänge durch Ihr Datenbankmanagementsystem begrenzt wird. Hier ist ein Beispiel:

-- 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);

In diesem Beispiel wird eine temporäre Tabelle temp_values erstellt und mit den gewünschten Werten aufgefüllt. Die Hauptabfrage verwendet dann eine Unterabfrage, um diese Werte aus der temporären Tabelle abzurufen und die Tabelle entsprechend zu filtern. employees Tabelle entsprechend zu filtern.

Kombinieren von IN mit anderen Operatoren

Der Operator IN kann mit anderen SQL-Operatoren, wie AND und OR, kombiniert werden, um komplexere Filterbedingungen zu erstellen. Auf diese Weise können Sie Szenarien handhaben, in denen Sie Daten nach mehreren Kriterien filtern müssen, die verschiedene Operatoren beinhalten. Hier ist ein Beispiel:

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;

In dieser Abfrage wird IN in Kombination mit AND verwendet, um Bestellungen nach dem Bestelldatum, dem Land des Kunden und dem Gesamtbetrag zu filtern.

Jetzt ist es an der Zeit, die Verwendung von SQL IN zu üben

Der Operator IN ist ein leistungsfähiges und vielseitiges Werkzeug, das Ihre SQL-Datenanalyse und Berichtsaufgaben erheblich vereinfachen kann. Wenn Sie die Syntax, die fortgeschrittene Verwendung, die Leistungsüberlegungen und die besten Praktiken verstehen, können Sie IN nutzen, um relevante Daten aus Ihren Datenbanken effektiv zu filtern und abzurufen und gleichzeitig eine optimale Abfrageleistung und Wartbarkeit zu gewährleisten.

Wir danken Ihnen für die Lektüre unseres Artikels und hoffen, dass Sie die leistungsstarken Funktionen des SQL IN-Operators kennengelernt haben. Wenn Sie gerade erst mit SQL anfangen, schauen Sie sich unseren interaktiven Kurs SQL für Anfänger an. Wenn Sie ein erfahrener SQL-Anwender sind, der praktische Erfahrungen sammeln möchte, besuchen Sie unseren SQL-Praxis Kurs. Viel Spaß beim Lernen!