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.