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 customere payment tabelle nel database di esempio per la dimostrazione:

tabelle clienti e pagamenti

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:

PostgreSQL EXISTS example

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:

Esempio PostgreSQL NOT EXISTS

C) EXISTS e NULL

Se la subquery restituisce NULLEXISTS restituisce true. Vedere il seguente esempio:

SELECTfirst_name,last_nameFROMcustomerWHEREEXISTS( SELECT NULL )ORDER BYfirst_name,last_name;
Code language: SQL (Structured Query Language) (sql)

In questo esempio, la subquery ha restituito NULL, quindi, la query ha restituito tutte le righe della tabella customer.

PostgreSQL EXIST with NULL example

In questo tutorial, avete imparato ad usare il PostgreSQL EXISTS per verificare l’esistenza di righe nella subquery.

  • Questo tutorial è stato utile?
  • SìNo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *