Database
 sql >> Base de Dados >  >> RDS >> Database

Operador SQL EXISTS para iniciantes


Em SQL, o EXISTS O operador especifica uma subconsulta para testar a existência de linhas. Ele retorna TRUE quando a subconsulta retorna uma ou mais linhas.

Uma subconsulta é uma consulta aninhada dentro de outra consulta (ou mesmo outra subconsulta)

Este artigo contém alguns exemplos básicos do EXISTS operador.

Tabelas de origem


As tabelas a seguir são usadas para os exemplos nesta página.
SELECT * FROM PetTypes;
SELECT * FROM Pets;

Resultado:
+-------------+-----------+
| 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)

Exemplo


Aqui está um exemplo para demonstrar o EXISTS operador.
SELECT 
    pt.PetTypeId,
    pt.PetType
FROM PetTypes pt
WHERE EXISTS ( 
    SELECT p.PetTypeId 
    FROM Pets p 
    WHERE p.PetTypeId = pt.PetTypeId 
    );

Resultado:
+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Este exemplo nos mostra quantos tipos de animais de estimação existem em nosso hotel para animais de estimação. Na verdade, existem quatro tipos de animais de estimação, mas apenas três deles correspondem a um animal de estimação real no Pets tabela.

Isso fornece o mesmo resultado que obteríamos com a seguinte consulta que usa o IN operador.
SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Usando NOT EXISTS


Poderíamos adicionar o NOT operador para negar os resultados e ver quantos tipos de animais de estimação não em nosso hotel para animais de estimação.
SELECT 
    pt.PetTypeId,
    pt.PetType
FROM PetTypes pt
WHERE NOT EXISTS ( 
    SELECT p.PetTypeId 
    FROM Pets p 
    WHERE p.PetTypeId = pt.PetTypeId 
    );

Resultado:
+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 4           | Rabbit    |
+-------------+-----------+

Neste caso, nosso banco de dados contém um tipo de animal de estimação de Rabbit , mas atualmente não temos coelhos como animais de estimação.