Mit dem Operator SQL EXISTS können Sie eine Un­ter­ab­fra­ge auf einen be­stimm­ten Eintrag hin über­prü­fen. Das Ergebnis ist ein boole­scher Wert. Auch die Abfrage mehrerer Be­din­gun­gen ist möglich.

Was ist SQL EXISTS?

In der Struc­tu­red Query Language gibt es neben den regulären Abfragen das Prinzip der „Un­ter­ab­fra­gen“ oder Sub­queries. Wenn Sie über­prü­fen möchten, ob ein be­stimm­ter Wert innerhalb einer dieser Sub­queries vorhanden ist, können Sie den Operator SQL EXISTS nutzen. Dieser wendet eine de­fi­nier­te Bedingung auf die Un­ter­ab­fra­ge an und gibt den Wert TRUE (also „wahr“) aus, sofern diese erfüllt wird. Nur wenn dies der Fall ist, wird dann auch die über­ge­ord­ne­te Abfrage durch­ge­führt. SQL EXISTS kann mit den SQL-Befehlen DELETE, INSERT, SELECT und UPDATE aus­ge­führt werden.

vServer / VPS
VPS un­schlag­bar günstig auf Dell En­ter­pri­se Servern
  • 1 Gbit/s, un­be­grenzt Traffic & mehr Cores
  • Min­des­tens 99,99% Ver­füg­bar­keit & ISO-zer­ti­fi­zier­te Re­chen­zen­tren
  • Aus­ge­zeich­ne­ter 24/7 Premium-Support mit per­sön­li­chem Berater

Syntax und Funk­ti­ons­wei­se

Im Folgenden zeigen wir Ihnen die Funk­ti­ons­wei­se von SQL EXISTS in Kom­bi­na­ti­on mit SELECT. Die ent­spre­chen­de 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) be­zeich­net die Spalte oder die Spalten, die durch SELECT gefiltert werden sollen. Danach geben Sie den Namen der Tabelle an, in der der Befehl aus­ge­führt werden soll. Die Über­prü­fung der Subquery erfolgt danach über WHERE EXISTS. An dieser Stelle geben Sie die ent­spre­chen­de Un­ter­ab­fra­ge in Klammern an.

Bei Aus­füh­rung des Codes wird zunächst die über­ge­ord­ne­te Abfrage ein­ge­lei­tet. Dann initiiert das System die Un­ter­ab­fra­ge. Gibt diese ein Ergebnis (also TRUE) aus, wird das Ergebnis der Haupt­ab­fra­ge be­rück­sich­tigt. Ist das Ergebnis der Un­ter­ab­fra­ge aber NULL, wird auch das Ergebnis der Haupt­ab­fra­ge über­sprun­gen.

Beispiel für die Anwendung des Operators

Die Bedeutung und Funk­ti­ons­wei­se von SQL EXISTS lässt sich am ein­fachs­ten mit einem Beispiel ver­an­schau­li­chen. Dafür erstellen wir zwei ver­schie­de­ne Tabellen. Die erste Tabelle trägt den Namen „Kun­den­lis­te“. Darin sind ver­schie­de­ne Kundinnen und Kunden eines Un­ter­neh­mens mit Kun­den­num­mer, Name und Standort gelistet. Diese Tabelle sieht aus wie folgt:

Kun­den­num­mer 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 „Be­stel­lun­gen“. Sie enthält für jeden Eintrag eine Ar­ti­kel­num­mer, die Kun­den­num­mer und das Be­stell­da­tum. So sieht sie aus:

Ar­ti­kel­num­mer Kun­den­num­mer Be­stell­da­tum
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 min­des­tens eine Be­stel­lung auf­ge­ge­ben 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 Kun­den­num­mern aus der Kun­den­lis­te auch in den Be­stel­lun­gen vorkommen. Ist dies der Fall (ist der Wert also TRUE), werden die ent­spre­chen­den Einträge aus­ge­lis­tet. Unsere Tabelle sieht nun so aus:

Kun­den­num­mer Name Standort
1431 Müller München
1118 Becker Passau

Mehrere Be­din­gun­gen abfragen

Sie haben auch die Mög­lich­keit, mehrere Be­din­gun­gen ab­zu­fra­gen und so Ihre Auswahl noch weiter zu spe­zi­fi­zie­ren. Im folgenden Beispiel wollen wir so über­prü­fen, ob nicht nur bestimmte Kun­den­num­mern 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:

Kun­den­num­mer Name Standort
1431 Müller München

Kom­bi­na­ti­on mit NOT

Auch wenn Sie den um­ge­kehr­ten Weg gehen wollen, bietet Ihnen SQL EXISTS diese Option. Im folgenden Beispiel erfragen wir sämtliche Kundinnen und Kunden, die im ent­spre­chen­den Zeit­rah­men keine Be­stel­lung auf­ge­ge­ben 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:

Kun­den­num­mer Name Standort
1427 Schmidt Berlin
1377 Schulz Hamburg
1212 Peters Hamburg

Al­ter­na­ti­ven zu SQL EXISTS

Es gibt einige Al­ter­na­ti­ven zu SQL EXISTS, mit denen Sie ebenfalls Sub­queries auf bestimmte Einträge hin un­ter­su­chen können. Die prak­tischs­ten Optionen sind die Ope­ra­to­ren IN und JOIN, die Sie beide ebenfalls nach Ihren Be­dürf­nis­sen spe­zi­fi­zie­ren können.

Tipp

Top-Per­for­mance und per­sön­li­che 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 Be­dürf­nis­sen passt!

Zum Hauptmenü