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.
- 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);
sqlname_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);
sqlJetzt ü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');
sqlAuch 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);
sqlDies 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.
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!