Summario: in questo tutorial, imparerete come usare l’operatore PostgreSQL EXISTS
per verificare l’esistenza di righe in una sottoquery.
Introduzione all’operatore EXISTS di PostgreSQL
L’operatore EXISTS
è un operatore booleano che verifica l’esistenza di righe in una subquery.
Di seguito viene illustrata la sintassi dell’operatore EXISTS
:
EXISTS (subquery)
Il EXISTS
accetta un argomento che è una subquery.
Se la subquery restituisce almeno una riga, il risultato di EXISTS
è vero. Nel caso in cui la sottoquery non restituisca nessuna riga, il risultato di EXISTS
è falso.
L’operatore EXISTS
è spesso usato con la sottoquery correlata.
Il risultato dell’operatore EXISTS
dipende dall’eventuale riga restituita dalla subquery, e non dal contenuto della riga. Pertanto, le colonne che appaiono nella clausola SELECT
della subquery non sono importanti.
Per questo motivo, la convenzione di codifica comune è di scrivere EXISTS
nella forma seguente:
Nota che se la subquery ritorna NULL, il risultato di EXISTS
è vero.
Esempi di PostgreSQL EXISTS
Utilizzeremo le seguenti customer
e payment
tabelle nel database di esempio per la dimostrazione:
A) Trova i clienti che hanno almeno un pagamento il cui importo è superiore a 11.
La seguente dichiarazione restituisce i clienti che hanno pagato almeno un affitto con un importo superiore a 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;
La query restituisce il seguente output:
In questo esempio, per ogni cliente nella tabella customer
, la subquery controlla la tabella payment
per trovare se quel cliente ha effettuato almeno un pagamento (p.customer_id = c.customer_id
) e l’importo è maggiore di 11 ( amount > 11
)
B) Esempio NOT EXISTS
L’operatore NOT
nega il risultato dell’operatore EXISTS
. Il NOT EXISTS
è opposto al EXISTS
. Significa che se la subquery non restituisce alcuna riga, il NOT EXISTS
restituisce vero. Se la subquery restituisce una o più righe, il NOT EXISTS
restituisce false.
L’esempio seguente restituisce i clienti che non hanno effettuato alcun pagamento superiore a 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;
Ecco l’output:
C) EXISTS e NULL
Se la subquery restituisce NULL
EXISTS
restituisce true. Vedere il seguente esempio:
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerWHEREEXISTS( SELECT NULL )ORDER BYfirst_name,last_name;
In questo esempio, la subquery ha restituito NULL
, quindi, la query ha restituito tutte le righe della tabella customer
.
In questo tutorial, avete imparato ad usare il PostgreSQL EXISTS
per verificare l’esistenza di righe nella subquery.
- Questo tutorial è stato utile?
- SìNo