Samenvatting: in deze tutorial leert u hoe u de PostgreSQL EXISTS
operator kunt gebruiken om te testen op het bestaan van rijen in een subquery.
Inleiding tot PostgreSQL EXISTS operator
De EXISTS
operator is een booleaanse operator die het bestaan van rijen in een subquery controleert.
Het volgende illustreert de syntaxis van de EXISTS
operator:
EXISTS (subquery)
De EXISTS
accepteert een argument dat een subquery is.
Als de subquery ten minste één rij retourneert, is het resultaat van EXISTS
waar. Als de subquery geen rij retourneert, is het resultaat van EXISTS
false.
De EXISTS
operator wordt vaak gebruikt met de correlated subquery.
Het resultaat van de EXISTS
operator hangt af van de vraag of een rij door de subquery is geretourneerd, en niet van de rij-inhoud. Daarom zijn kolommen die voorkomen op de SELECT
clausule van de subquery niet van belang.
Om deze reden is de gebruikelijke coderingsconventie om EXISTS
in de volgende vorm te schrijven:
Merk op dat als de subquery NULL retourneert, het resultaat van EXISTS
true is.
PostgreSQL EXISTS voorbeelden
We zullen de volgende customer
en payment
tabellen in de voorbeeld database gebruiken voor de demonstratie:
A) Zoek klanten die ten minste één betaling hebben waarvan het bedrag hoger is dan 11.
Het volgende statement retourneert klanten die ten minste één huur hebben betaald met een bedrag dat hoger is dan 11:
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;
De query retourneert de volgende uitvoer:
In dit voorbeeld wordt voor elke klant in de tabel customer
, controleert de subquery de tabel payment
om na te gaan of die klant ten minste één betaling heeft verricht (p.customer_id = c.customer_id
) en het bedrag groter is dan 11 ( amount > 11
)
B) NOT EXISTS voorbeeld
De NOT
operator ontkent het resultaat van de EXISTS
operator. De NOT EXISTS
is tegengesteld aan EXISTS
. Het betekent dat als de subquery geen rij retourneert, de NOT EXISTS
true retourneert. Als de subquery een of meer rijen retourneert, retourneert de NOT EXISTS
false.
Het volgende voorbeeld retourneert klanten die geen betaling hebben gedaan die groter is dan 11.
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 volgt de uitvoer:
C) EXISTS en NULL
Als de subquery NULL
teruggeeft, geeft EXISTS
true terug. Zie het volgende voorbeeld:
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerWHEREEXISTS( SELECT NULL )ORDER BYfirst_name,last_name;
In dit voorbeeld retourneerde de subquery NULL
, daarom retourneerde de query alle rijen uit de customer
tabel.
In deze tutorial hebt u geleerd hoe u de PostgreSQL EXISTS
kunt gebruiken om te testen op het bestaan van rijen in de subquery.
- Was deze handleiding nuttig?
- Ja/Nee