L'operatore Exists in SQL
In una select nidificata la clausola EXISTS verifica se un valore esiste nella select interna.
E' una condizione di esistenza.
L'operatore EXISTS restituisce un valore booleano:
- vero (esiste)
- falso (non esiste).
Nota. La condizione di non esistenza si realizza con NOT EXISTS. La spiegazione e il funzionamento sono identici ma i risultati sono invertiti. In questo caso è vero se non esiste, è falso se esiste.
Un esempio pratico
Ho la tabella Persone composta da quattro colonne (Nome, Cognome, Età, Residenza).
Voglio verificare se esistono nella tabella delle persone con lo stesso cognome ma nome diverso.
Scrivo una query nidificata usando la clausola EXISTS.
SELECT * FROM `persone` T1
WHERE EXISTS ( SELECT * FROM Persone T2
WHERE T2.cognome = T1.cognome AND T1.Nome <> T2.Nome )
Il DBMS legge i valori di una riga nella select esterna.
Poi nella tabella più interna verifica se esiste un'altra persona con lo stesso cognome ma nome diverso.
Il risultato della query è il seguente
Nella tabella Persone due tuple rispettano questa condizione.
E così via.