Con l’operatore SQL EXISTS puoi cercare una voce specifica all’interno di una subquery. Il risultato re­sti­tui­sce un valore booleano che è TRUE (vero) se la subquery re­sti­tui­sce almeno una riga. Inoltre, il comando EXISTS in SQL consente di ve­ri­fi­ca­re più con­di­zio­ni.

Cos’è SQL EXISTS?

Nello Struc­tu­red Query Language, oltre alle normali query esistono le subquery, chiamate anche sot­to­que­ry. Se desideri ve­ri­fi­ca­re la presenza di un de­ter­mi­na­to valore all’interno di una subquery, puoi usare l’operatore SQL EXISTS. Così facendo applichi alla subquery una con­di­zio­ne definita che, se risulta sod­di­sfat­ta, re­sti­tui­sce il valore TRUE (vero). Solo a questo punto viene eseguita anche la query esterna. SQL EXISTS può essere eseguito in com­bi­na­zio­ne con i comandi SQL DELETE, INSERT, SELECT e UPDATE.

Server virtuali (VPS)
Affidati ai VPS e server di IONOS, il tuo partner digitale cer­ti­fi­ca­to ISO
  • 1 Gbps di larghezza di banda e traffico il­li­mi­ta­to
  • Di­spo­ni­bi­li­tà del 99,99% e cer­ti­fi­ca­zio­ne ISO
  • As­si­sten­za 24/7 e con­su­len­te personale

Sintassi e fun­zio­na­men­to

Di seguito ti mostriamo il fun­zio­na­men­to di SQL EXISTS in com­bi­na­zio­ne 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 spe­ci­fi­chia­mo il nome della tabella per la quale verrà eseguito il comando. La verifica della subquery avviene in un secondo momento tramite la con­di­zio­ne WHERE EXISTS. Quindi inseriamo la subquery fra parentesi.

Quando il codice viene eseguito, prima si verifica la query esterna e solo suc­ces­si­va­men­te la sot­to­que­ry. Se la sot­to­que­ry re­sti­tui­sce almeno un record (ovvero TRUE), il risultato della query esterna viene preso in con­si­de­ra­zio­ne. Tuttavia, se la sot­to­que­ry re­sti­tui­sce 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 chia­me­re­mo “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 ef­fet­tua­to 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 re­sti­tui­sce il valore TRUE, allora vengono elencate le relative voci, cioè le in­for­ma­zio­ni correlate ai clienti che hanno ef­fet­tua­to un ordine. Di seguito la tabella:

Numero cliente Cognome Città
1431 Costa Firenze
1118 Russo Napoli

In­ter­ro­ga­re più con­di­zio­ni

Per ottenere risultati più precisi, durante l’in­ter­ro­ga­zio­ne puoi spe­ci­fi­ca­re più criteri. Nell’esempio qui sotto non vogliamo solo ve­ri­fi­ca­re se la tabella include de­ter­mi­na­ti 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

Com­bi­na­zio­ne con NOT

SQL EXISTS consente anche di ef­fet­tua­re l’ope­ra­zio­ne contraria, ad esempio cercare tutti i clienti che in un de­ter­mi­na­to periodo di tempo non hanno ef­fet­tua­to 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 al­ter­na­ti­ve a SQL EXISTS

Esistono alcune al­ter­na­ti­ve a SQL EXIST che ti con­sen­to­no di filtrare de­ter­mi­na­te voci all’interno di una subquery. Le opzioni più pratiche sono gli operatori IN e JOIN, che potrai spe­ci­fi­ca­re in base alle tue esigenze.

Consiglio

Massima per­for­man­ce e con­su­len­za per­so­na­liz­za­ta. Grazie all’hosting SQL server di IONOS puoi scegliere fra MSSQL, MySQL e MariaDB. Seleziona il database più adatto alle tue esigenze!

Vai al menu prin­ci­pa­le