Database
 sql >> Database >  >> RDS >> Database

SQL EXISTS Operatore per principianti

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.