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-BefehlenDELETE, 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änzungNOT 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?
Warum nicht?
Preisgünstiges Cloud ComputingSparen Sie 50 % Ihrer Computing-Kosten
IONOS ist als neuer Preis-Leistungs-Führer im Cloud Computing durch Cloud Mercato im Juli 2024 ausgezeichnet worden.