SQL EXISTS: Verificar subconsultas para valores específicos

Com o operador SQL EXISTS, você pode verificar se uma subconsulta contém um valor específico. O resultado é um valor booleano. Também é possível consultar várias condições.

O que é SQL EXISTS?

Em SQL (Structured Query Language), além das consultas regulares, existe o conceito de “subconsultas” ou subqueries. Se você quiser verificar se um valor específico está presente em uma dessas subconsultas, você pode usar o operador SQL EXISTS. Este operador aplica uma condição definida à subconsulta e retorna o valor TRUE (ou seja, “verdadeiro”) se a condição for satisfeita. Somente se essa condição for atendida, a consulta principal será executada. O operador SQL EXISTS pode ser utilizado com os comandos SQL DELETE, INSERT, SELECT e UPDATE.

vServer (VPS) da IONOS

Hospedagem VPS poderosa e de baixo custo para rodar suas aplicações sob medida, com assistente pessoal e suporte 24 horas.

  • Armazenamento 100% SSD
  • Pronto em 55 segundos
  • Certificado SSL

Sintaxe e funcionamento de SQL EXISTS

A seguir, mostramos como o operador SQL EXISTS funciona em combinação com SELECT. A sintaxe correspondente é a seguinte:

SELECT nome_da_coluna(s)
FROM nome_da_tabela
WHERE EXISTS
(SELECT nome_da_coluna FROM nome_da_tabela WHERE condição);
sql

nome_da_coluna(s) refere-se à coluna ou colunas que devem ser filtradas pelo SELECT. Em seguida, você deve especificar o nome da tabela onde o comando será executado. A verificação da subconsulta é feita por meio de WHERE EXISTS. Neste ponto, você fornece a subconsulta correspondente entre parênteses.

Ao executar o código, a consulta principal é iniciada. Então, o sistema executa a subconsulta. Se a subconsulta retornar um resultado (ou seja, TRUE), o resultado da consulta principal será considerado. Se o resultado da subconsulta for NULL, o resultado da consulta principal também será ignorado.

Exemplo de aplicação de SQL EXISTS

A importância e o funcionamento do SQL EXISTS podem ser melhor compreendidos com um exemplo. Para isso, criamos duas tabelas diferentes. A primeira tabela é chamada “Lista de Clientes”. Nela estão listados vários clientes de uma empresa, com número de cliente, nome e localização. Esta tabela é como segue:

Número do Cliente Nome Localização
1427 Machado Rio de Janeiro
1377 Silva Curitiba
1212 Recife Curitiba
1431 Ribeiro Luziânia
1118 Becker Palmas

Nossa segunda tabela é chamada de “Pedidos”. Ela contém para cada entrada um número de item, o número do cliente e a data do pedido. Ela é estruturada da seguinte forma:

Número do Item Número do Cliente Data do Pedido
00282 1172 2024-01-17
00311 1361 2024-01-19
00106 1431 2024-01-19
00378 1274 2024-01-30
00418 1118 2024-02-03

Agora, podemos filtrar quais clientes fizeram pelo menos um pedido no período de 17 de janeiro a 3 de fevereiro. Para isso, utilizamos o seguinte código:

SELECT Número do Cliente, Nome, Localização
FROM Lista de Clientes
WHERE EXISTS
(SELECT * FROM Pedidos WHERE Clientes.Número do Cliente = Pedidos.Número do Cliente);
sql

O sistema verifica se os números dos clientes da tabela “Lista de Clientes” também aparecem na tabela “Pedidos”. Se isso acontecer (ou seja, o valor é TRUE), os registros correspondentes são listados. A tabela resultante ficará assim:

Número do Cliente Nome Localização
1431 Ribeiro Luziânia
1118 Becker Palmas

Consultar várias condições com SQL EXISTS

Você também tem a possibilidade de consultar várias condições e, assim, especificar ainda mais sua seleção. No exemplo a seguir, queremos verificar se não apenas certos números de cliente estão presentes, mas também se a localização é Luziânia. O código fica assim:

SELECT Número do Cliente, Nome, Localização
FROM Lista de Clientes
WHERE EXISTS
(SELECT * FROM Pedidos WHERE Clientes.Número do Cliente = Pedidos.Número do Cliente AND Localização = 'Luziânia');
sql

Aqui o resultado também é TRUE e a saída é a seguinte:

Número do Cliente Nome Localização
1431 Ribeiro Luziânia

Combinar SQL EXISTS e NOT

Se você quiser seguir o caminho inverso, o SQL EXISTS também oferece essa opção. No exemplo a seguir, buscamos todos os clientes que não fizeram nenhum pedido no período correspondente. Para isso, adicionamos o complemento NOT.

SELECT Número do Cliente, Nome, Localização
FROM Lista de Clientes
WHERE NOT EXISTS
(SELECT * FROM Pedidos WHERE Clientes.Número do Cliente = Pedidos.Número do Cliente);
sql

A saída será:

Número do Cliente Nome Localização
1427 Machado Rio de Janeiro
1377 Silva Curitiba
1212 Recife Curitiba

Alternativas ao SQL EXISTS

Existem algumas alternativas ao SQL EXISTS que também permitem investigar subconsultas em busca de entradas específicas. As opções mais práticas são os operadores IN e JOIN, que você também pode especificar de acordo com suas necessidades.

Dica

Desempenho de alta qualidade e consultoria personalizada! Com SQL Server Hosting da IONOS, você pode escolher entre MSSQL, MySQL e MariaDB. Escolha o modelo que melhor se adapta às suas necessidades!

Este artigo foi útil?
Para melhorar a sua experiência, este site usa cookies. Ao acessar o nosso site, você concorda com nosso uso de cookies. Mais informações
Page top