SQL EXISTS: verificare la presenza di determinati valori in una subquery

Con l’operatore SQL EXISTS puoi cercare una voce specifica all’interno di una subquery. Il risultato restituisce un valore booleano che è TRUE (vero) se la subquery restituisce almeno una riga. Inoltre, il comando EXISTS in SQL consente di verificare più condizioni.

Cos’è SQL EXISTS?

Nello Structured Query Language, oltre alle normali query esistono le subquery, chiamate anche sottoquery. Se desideri verificare la presenza di un determinato valore all’interno di una subquery, puoi usare l’operatore SQL EXISTS. Così facendo applichi alla subquery una condizione definita che, se risulta soddisfatta, restituisce il valore TRUE (vero). Solo a questo punto viene eseguita anche la query esterna. SQL EXISTS può essere eseguito in combinazione con i comandi SQL DELETE, INSERT, SELECT e UPDATE.

Server virtuali (VPS)
Virtualizzazione totale con accesso root completo
  • Traffico illimitato e fino a 1 Gbit/s di larghezza di banda
  • Storage SSD NVMe veloce
  • Plesk Web Host Edition incluso

Sintassi e funzionamento

Di seguito ti mostriamo il funzionamento di SQL EXISTS in combinazione con SELECT. Questa la sintassi:

SELECT nome_della/e_colonna/e
FROM nome_della_tabella
WHERE EXISTS
(SELECT nome_della_colonna FROM nome_della_tabella WHERE condizione);
sql

nome_della/e_colonna/e indica la colonna o le colonne che dovranno essere filtrate con SELECT. Ora specifichiamo il nome della tabella per la quale verrà eseguito il comando. La verifica della subquery avviene in un secondo momento tramite la condizione WHERE EXISTS. Quindi inseriamo la subquery fra parentesi.

Quando il codice viene eseguito, prima si verifica la query esterna e solo successivamente la sottoquery. Se la sottoquery restituisce almeno un record (ovvero TRUE), il risultato della query esterna viene preso in considerazione. Tuttavia, se la sottoquery restituisce NULL, il risultato della query esterna verrà ignorato.

Esempio di utilizzo dell’operatore

Per spiegare meglio come funziona SQL EXISTS e a cosa serve, di seguito facciamo un esempio. A questo proposito creiamo due tabelle diverse e chiamiamo la prima “Elenco clienti”. In questa tabella sono elencati i vari clienti di un’azienda con relativo numero cliente, cognome e città. La tabella si presenta così:

Numero cliente Cognome Città
1427 Rossi Roma
1377 Bianchi Milano
1212 Ferrari Milano
1431 Costa Firenze
1118 Russo Napoli

La seconda tabella la chiameremo “Ordini”. Ogni voce della tabella contiene il numero articolo, il numero clienti e la data dell’ordine.

Questo l’aspetto della tabella:

Numero articolo Numero cliente Data dell’ordine
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

Ora puoi cercare quali clienti hanno effettuato almeno un ordine nel periodo di tempo compreso fra il 17 gennaio e il 3 febbraio. Per farlo digiti questo codice:

SELECT Numero cliente, Cognome, Città
FROM Elenco clienti
WHERE EXISTS
(SELECT * FROM Ordini WHERE Elenco clienti.Numero cliente = Ordini.Numero cliente);
sql

Ora il sistema verifica che i numeri cliente contenuti nella lista clienti siano presenti anche negli ordini. Se tale verifica restituisce il valore TRUE, allora vengono elencate le relative voci, cioè le informazioni correlate ai clienti che hanno effettuato un ordine. Di seguito la tabella:

Numero cliente Cognome Città
1431 Costa Firenze
1118 Russo Napoli

Interrogare più condizioni

Per ottenere risultati più precisi, durante l’interrogazione puoi specificare più criteri. Nell’esempio qui sotto non vogliamo solo verificare se la tabella include determinati numeri cliente, ma anche se la città è Firenze. Il codice è il seguente:

SELECT Numero cliente, Cognome, Città
FROM Elenco clienti
WHERE EXISTS
(SELECT * FROM Ordini WHERE Elenco clienti.Numero cliente = Ordini.Numero cliente AND Città = 'Firenze');
sql

Anche in questo caso il risultato è TRUE e l’output è il seguente:

Numero cliente Cognome Città
1431 Costa Firenze

Combinazione con NOT

SQL EXISTS consente anche di effettuare l’operazione contraria, ad esempio cercare tutti i clienti che in un determinato periodo di tempo non hanno effettuato alcun ordine. Questo il codice, con l’aggiunta della clausola NOT.

SELECT Numero cliente, Cognome, Città
FROM Elenco clienti
WHERE NOT EXISTS
(SELECT * FROM Ordini WHERE Elenco clienti.Numero cliente = Ordini.Numero cliente);
sql

Questo l’output:

Numero cliente Cognome Città
1427 Rossi Roma
1377 Bianchi Milano
1212 Ferrari Milano

Alcune alternative a SQL EXISTS

Esistono alcune alternative a SQL EXIST che ti consentono di filtrare determinate voci all’interno di una subquery. Le opzioni più pratiche sono gli operatori IN e JOIN, che potrai specificare in base alle tue esigenze.

Consiglio

Massima performance e consulenza personalizzata. Grazie all’hosting SQL server di IONOS puoi scegliere fra MSSQL, MySQL e MariaDB. Seleziona il database più adatto alle tue esigenze!

Hai trovato questo articolo utile?
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.
Page top