SQL EXISTS: Subqueries auf bestimmte Werte überprüfen

Mit dem Operator SQL EXISTS können Sie eine Unterabfrage auf einen bestimmten Eintrag hin überprüfen. Das Ergebnis ist ein boolescher Wert. Auch die Abfrage mehrerer Bedingungen ist möglich.

Was ist SQL EXISTS?

In der Structured Query Language gibt es neben den regulären Abfragen das Prinzip der „Unterabfragen“ oder Subqueries. Wenn Sie überprüfen möchten, ob ein bestimmter Wert innerhalb einer dieser Subqueries vorhanden ist, können Sie den Operator SQL EXISTS nutzen. Dieser wendet eine definierte Bedingung auf die Unterabfrage an und gibt den Wert TRUE (also „wahr“) aus, sofern diese erfüllt wird. Nur wenn dies der Fall ist, wird dann auch die übergeordnete Abfrage durchgeführt. SQL EXISTS kann mit den SQL-Befehlen DELETE, INSERT, SELECT und UPDATE ausgeführt werden.
vServer / VPS
Vollständig virtualisiert mit Root-Zugriff
  • Bis zu 1 Gbit/s Bandbreite & unbegrenzt Traffic
  • Schneller NVMe-SSD-Speicher
  • Kostenlose Plesk Web Host Edition

Syntax und Funktionsweise

Im Folgenden zeigen wir Ihnen die Funktionsweise von SQL EXISTS in Kombination mit SELECT. Die entsprechende Syntax sieht aus wie folgt:
SELECT name_der_spalte(n)
FROM name_der_tabelle
WHERE EXISTS
(SELECT name_der_spalte FROM name_der_tabelle WHERE bedingung);
sql
name_der_spalte(n) bezeichnet die Spalte oder die Spalten, die durch SELECT gefiltert werden sollen. Danach geben Sie den Namen der Tabelle an, in der der Befehl ausgeführt werden soll. Die Überprüfung der Subquery erfolgt danach über WHERE EXISTS. An dieser Stelle geben Sie die entsprechende Unterabfrage in Klammern an.
Bei Ausführung des Codes wird zunächst die übergeordnete Abfrage eingeleitet. Dann initiiert das System die Unterabfrage. Gibt diese ein Ergebnis (also TRUE) aus, wird das Ergebnis der Hauptabfrage berücksichtigt. Ist das Ergebnis der Unterabfrage aber NULL, wird auch das Ergebnis der Hauptabfrage übersprungen.

Beispiel für die Anwendung des Operators

Die Bedeutung und Funktionsweise von SQL EXISTS lässt sich am einfachsten mit einem Beispiel veranschaulichen. Dafür erstellen wir zwei verschiedene Tabellen. Die erste Tabelle trägt den Namen „Kundenliste“. Darin sind verschiedene Kundinnen und Kunden eines Unternehmens mit Kundennummer, Name und Standort gelistet. Diese Tabelle sieht aus wie folgt:
Kundennummer Name Standort
1427 Schmidt Berlin
1377 Schulz Hamburg
1212 Peters Hamburg
1431 Müller München
1118 Becker Passau
Unsere zweite Tabelle trägt den Namen „Bestellungen“. Sie enthält für jeden Eintrag eine Artikelnummer, die Kundennummer und das Bestelldatum. So sieht sie aus:
Artikelnummer Kundennummer Bestelldatum
00282 1172 2024-01-17
00311 1361 2024-01-19
00106 1431 2024-01-19
00378 1274 2024-01-30
00418 1118 2024-02-03
Nun können wir filtern, welche Kundinnen und Kunden im Zeitraum vom 17. Januar bis zum 3. Februar mindestens eine Bestellung aufgegeben haben. Dafür nutzen wir den folgenden Code:
SELECT Kundennummer, Name, Standort
FROM Kundenliste
WHERE EXISTS
(SELECT * FROM Bestellungen WHERE Kundenliste.Kundennummer = Bestellungen.Kundennummer);
sql
Jetzt überprüft das System, ob Kundennummern aus der Kundenliste auch in den Bestellungen vorkommen. Ist dies der Fall (ist der Wert also TRUE), werden die entsprechenden Einträge ausgelistet. Unsere Tabelle sieht nun so aus:
Kundennummer Name Standort
1431 Müller München
1118 Becker Passau

Mehrere Bedingungen abfragen

Sie haben auch die Möglichkeit, mehrere Bedingungen abzufragen und so Ihre Auswahl noch weiter zu spezifizieren. Im folgenden Beispiel wollen wir so überprüfen, ob nicht nur bestimmte Kundennummern enthalten sind, sondern auch der Standort München. Der Code sieht so aus:
SELECT Kundennummer, Name, Standort
FROM Kundenliste
WHERE EXISTS
(SELECT * FROM Bestellungen WHERE Kundenliste.Kundennummer = Bestellungen.Kundennummer AND Standort = 'München');
sql
Auch hier ist das Ergebnis TRUE und die Ausgabe ist diese:
Kundennummer Name Standort
1431 Müller München

Kombination mit NOT

Auch wenn Sie den umgekehrten Weg gehen wollen, bietet Ihnen SQL EXISTS diese Option. Im folgenden Beispiel erfragen wir sämtliche Kundinnen und Kunden, die im entsprechenden Zeitrahmen keine Bestellung aufgegeben haben. Dafür fügen wir die Ergänzung NOT ein.
SELECT Kundennummer, Name, Standort
FROM Kundenliste
WHERE NOT EXISTS
(SELECT * FROM Bestellungen WHERE Kundenliste.Kundennummer = Bestellungen.Kundennummer);
sql
Dies ist die Ausgabe:
Kundennummer Name Standort
1427 Schmidt Berlin
1377 Schulz Hamburg
1212 Peters Hamburg

Alternativen zu SQL EXISTS

Es gibt einige Alternativen zu SQL EXISTS, mit denen Sie ebenfalls Subqueries auf bestimmte Einträge hin untersuchen können. Die praktischsten Optionen sind die Operatoren IN und JOIN, die Sie beide ebenfalls nach Ihren Bedürfnissen spezifizieren können.
Tipp
Top-Performance und persönliche Beratung! Mit SQL-Server-Hosting von IONOS haben Sie die Wahl zwischen MSSQL, MySQL und MariaDB. Wählen Sie das Modell, das am besten zu Ihren Bedürfnissen passt!
War dieser Artikel hilfreich?
Page top