Trabalhando Com EXISTS
Trabalhando Com EXISTS
Trabalhando Com EXISTS
O EXISTS é uma cláusula SQL que testa quando há um ou mais resultados em uma SUBQUERY e
retorna o valor TRUE, permitindo filtrar colunas dentro de uma subconsulta.
O EXISTS é uma cláusula SQL que testa quando há um ou mais resultados em uma SUBQUERY e
retorna o valor TRUE, permitindo filtrar colunas dentro de uma subconsulta.
Visão geral
A cláusula EXISTS faz uma verificação se existe algum resultado para a subquery informada. Caso haja,
o resultado da consulta principal é exibido. É muito comum sua utilização quando se deseja trazer resultados
onde um valor específico existe dentro de outra tabela.
Para os exemplos a seguir, considere a estrutura de tabelas abaixo, onde temos uma tabela
chamada produto (Tabela 1), responsável por armazenar todos os produtos do estoque do cliente, a
tabela categoria_produto (Tabela 2), responsável por armazenar todas as categorias existentes no banco de
dados, e a tabela venda_produto (Tabela 3), que relaciona os produtos que foram vendidos.
id nome preco Id_categoria
1 Bola 35.00 1
2 Patinete 120.00 1
3 Carrinho 15.00 1
4 Skate 296.00 1
5 Notebook 3500.00 2
6 Monitor LG 19 450.00 2
7 O Diário de Anne Frank 45.00 3
8 O dia do Curinga 65.00 3
9 O mundo de Sofia 48.00 3
10 Através do Espelho 38.00 3
Tabela 1. Tabela produto
id nome
1 Infantil
2 Informatica
3 Educacional
Tabela 2. abela categoria_produto
Sintaxe
SELECT
[ coluna1, coluna2, ... | * ]
FROM
[ tabela1, tabela2, ... ]
WHERE
EXISTS (
SELECT
[ coluna1, coluna2, ... | * ]
FROM
[ tabela1, tabela2, ... ]
WHERE [ condicao ]
)
Na prática
Exemplo 1
Suponhamos que seja necessário trazer em uma consulta na tabela de produtos, todos aqueles registros
que tiveram alguma venda. Para isso podemos utilizar o EXISTS, que além de testar se a condição é verdadeira,
traz como retorno os dados da consulta. Observe a query abaixo:
id nome
1 Bola
2 Patinete
3 Carrinho
5 Notebook
6 Monitor LG 19
7 O Diário de Anne Frank
8 O dia do Curinga
9 O mundo de Sofia
Tabela 4. Lista de produtos que tiveram alguma venda
Exemplo 2
Neste exemplo utilizaremos o NOT EXISTS para trazer o resultado contrário a primeira query feita no
Exemplo 1. Suponhamos que seja necessário trazer da tabela produtos todos os registros que não tiveram
nenhuma venda. Para isso podemos utilizar a query abaixo:
SELECT P.ID, P.nome FROM produto P
WHERE NOT EXISTS (SELECT V.ID_PRODUTO FROM venda_produto V WHERE V.ID_PRODUTO = P.ID)
Exemplo 3
Para o exemplo a seguir, considere a estrutura de tabelas abaixo, onde temos a tabela projeto (Tabela 6),
responsável por manter todos os projetos da empresa, e a tabela comentario (Tabela 7), responsável por manter
todos os comentários referentes aos projetos cadastrados no banco de dados.
ID Titulo Data
7 Criando uma aplicação com React 2018-04-10
8 API RestFUL com Lumen 2018-05-10
9 Consumindo uma API RestFUL com Laravel 2018-05-20
10 Documentação SQL 2018-05-21
Tabela 6. Estrutura da tabela projeto
I
Comentario Data id_projeto
D
1 Muito legal essa aplicação! Adorei usar o React 2018-04-10 7
2 React é muito simples! Curti o projeto! parabéns! 2018-05-10 7
3 Muito top! 2018-05-20 9
4 Parabéns aos envolvidos! 2018-05-20 9
5 Muito legal, sempre gostei do Laravel. 2018-05-20 9
6 Interessante a forma de recueprar as informações. Não sabia. Gostei! 2018-05-21 9
7 Consigo fazer o mesmo com CodeIgniter? 2018-05-22 9
8 React é apenas JavaScript, há uma API bem pequena para aprender, 2018-05-23 7
apenas algumas funções e como usá-las. Depois disso, suas habilidades
em JavaScript serão o que te farão um melhor desenvolvedor React
Tabela 7. Estrutura da tabela comentario
Suponha que seja necessário trazer todos os projetos que tenham algum comentário cadastrado. Para isso
podemos utilizar a query abaixo:
Observe que selecionamos o id e o titulo do projeto e logo na Linha 7 utilizamos a cláusula EXISTS para
verificar se existem valores no resultado da subquery da Linha 9. Das Linhas 9 a 14 realizamos uma subquery
na tabela comentario, solicitando somente aqueles que o id do projeto seja igual ao campo id_projeto da tabela
comentario.
ID Titulo
7 Criando uma aplicação com React
9 Consumindo uma API RestFUL com Laravel
Tabela 8. Lista de projetos com comentários