In SQL, il EXISTS
operatore specifica una sottoquery per verificare l'esistenza di righe. Restituisce TRUE
quando la sottoquery restituisce una o più righe.
Una sottoquery è una query nidificata all'interno di un'altra query (o anche di un'altra sottoquery)
Questo articolo contiene alcuni esempi di base di EXISTS
operatore.
Tabelle di origine
Le seguenti tabelle vengono utilizzate per gli esempi in questa pagina.
SELECT * FROM PetTypes;
SELECT * FROM Pets;
Risultato:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | | 4 | Rabbit | +-------------+-----------+ (4 rows affected) +---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+ (8 rows affected)
Esempio
Ecco un esempio per dimostrare EXISTS
operatore.
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
Risultato:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
Questo esempio ci mostra quanti tipi di animali domestici sono presenti nel nostro hotel per animali domestici. In realtà ci sono quattro tipi di animali domestici, ma solo tre di questi corrispondono a un animale domestico reale nel Pets
tabella.
Ciò fornisce lo stesso risultato che avremmo ottenuto con la seguente query che utilizza IN
operatore.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Utilizzo di NOT EXISTS
Potremmo aggiungere il NOT
operatore per negare i risultati e vedere quanti tipi di animali non sono nel nostro hotel per animali domestici.
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE NOT EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
Risultato:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 4 | Rabbit | +-------------+-----------+
In questo caso, il nostro database contiene un tipo di animale domestico di Rabbit
, ma al momento non abbiamo conigli come animali domestici.