Zusammenfassung: In diesem Tutorial lernen Sie, wie Sie den PostgreSQL EXISTS
-Operator verwenden, um auf die Existenz von Zeilen in einer Subquery zu testen.
Einführung in den PostgreSQL EXISTS-Operator
Der EXISTS
-Operator ist ein boolescher Operator, der auf das Vorhandensein von Zeilen in einer Subquery testet.
Das Folgende illustriert die Syntax des EXISTS
-Operators:
EXISTS (subquery)
Der EXISTS
akzeptiert ein Argument, das eine Subquery ist.
Wenn die Subquery mindestens eine Zeile zurückgibt, ist das Ergebnis von EXISTS
wahr. Liefert die Subquery keine Zeile, ist das Ergebnis von EXISTS
falsch.
Der Operator EXISTS
wird oft mit der korrelierten Subquery verwendet.
Das Ergebnis des EXISTS
-Operators hängt davon ab, ob eine Zeile von der Unterabfrage zurückgegeben wird, und nicht vom Zeileninhalt. Daher sind die Spalten, die in der SELECT
-Klausel der Subquery erscheinen, nicht wichtig.
Aus diesem Grund ist es üblich, EXISTS
in der folgenden Form zu schreiben:
Beachten Sie, dass, wenn die Subquery NULL zurückgibt, das Ergebnis von EXISTS
wahr ist.
PostgreSQL EXISTS Beispiele
Wir verwenden für die Demonstration die folgenden customer
und payment
Tabellen in der Beispieldatenbank:
A) Finde Kunden, die mindestens eine Zahlung haben, deren Betrag größer als 11 ist.
Die folgende Anweisung gibt Kunden zurück, die mindestens eine Miete mit einem Betrag größer als 11 bezahlt haben:
SELECT first_name, last_nameFROM customer cWHERE EXISTS (SELECT 1 FROM payment p WHERE p.customer_id = c.customer_id AND amount > 11 )ORDER BY first_name, last_name;
Die Abfrage gibt die folgende Ausgabe zurück:
In diesem Beispiel wird für jeden Kunden in der Tabelle customer
, überprüft die Subquery die Tabelle payment
, um herauszufinden, ob dieser Kunde mindestens eine Zahlung (p.customer_id = c.customer_id
) geleistet hat und der Betrag größer als 11 ist ( amount > 11
)
B) NOT EXISTS Beispiel
Der NOT
Operator negiert das Ergebnis des EXISTS
Operators. Das NOT EXISTS
ist das Gegenstück zum EXISTS
. Das bedeutet, dass das NOT EXISTS
true zurückgibt, wenn die Subquery keine Zeile zurückgibt. Wenn die Subquery eine oder mehrere Zeilen zurückgibt, gibt das NOT EXISTS
false zurück.
Das folgende Beispiel gibt Kunden zurück, die keine Zahlung geleistet haben, die größer als 11 ist.
SELECT first_name, last_nameFROM customer cWHERE NOT EXISTS (SELECT 1 FROM payment p WHERE p.customer_id = c.customer_id AND amount > 11 )ORDER BY first_name, last_name;
Hier ist die Ausgabe:
C) EXISTS und NULL
Wenn die Subquery NULL
zurückgibt, liefert EXISTS
true. Siehe das folgende Beispiel:
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerWHEREEXISTS( SELECT NULL )ORDER BYfirst_name,last_name;
In diesem Beispiel hat die Subquery NULL
zurückgegeben, daher hat die Abfrage alle Zeilen aus der Tabelle customer
zurückgegeben.
In diesem Tutorial haben Sie gelernt, wie Sie die PostgreSQL EXISTS
auf die Existenz von Zeilen in der Subquery testen können.
- War dieses Tutorial hilfreich?
- JaNein