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

SQL IN vs SQL EXISTS


SQL IN vs SQL EXISTS

Este artigo discute em detalhes os operadores IN e EXISTS no SQL . É uma pergunta comum entre os desenvolvedores qual é a diferença entre esses dois operadores. Para saber a diferença, vamos primeiro discutir sobre cada um desses operadores em detalhes.

Operador IN

O operador IN é usado para obter resultados quando um valor especificado corresponde a um valor em um conjunto de valores ou é retornado por uma consulta interna. Este operador também pode ser usado com o WHERE cláusula para especificar mais de um valor. O operador IN é frequentemente chamado de acrônimo para o operador OR porque reduz o uso de várias condições OR em consultas SELECT, INSERT, UPDATE ou DELETE .

Neste operador, a subconsulta é resolvida primeiro e esse resultado é usado para resolver a consulta externa.

A seguir está a sintaxe geral do operador IN:
SELECT column_name
 FROM table_name
 WHERE column_name IN (value1, value2, …); 

Exemplo:

Vamos considerar a seguinte tabela Customer.
Cust_id Cust_name Cidade Ocupação
1 Harry Calcutá Negócios
2 Rony Mumbai Doutor
3 Alvo Delhi Engenheiro
4 Dobby Punha Cientista
5 Snap Bangalore Aluno

Consulta:
SELECT *
 FROM Customer    
 WHERE Occupation IN ('Doctor', 'Scientist', 'Engineer'); 

A consulta acima retornará todos os clientes que são Médicos, Cientistas ou Engenheiros.

Saída:
Cust_id Cust_name Cidade Ocupação
2 Rony Mumbai Doutor
3 Alvo Delhi Engenheiro
4 Dobby Punha Cientista

Operador EXISTS

O operador EXISTS, diferentemente do operador IN, retorna um valor booleano. Este operador verifica o resultado da consulta interna e retorna um valor booleano, ou seja, verdadeiro ou falso. Se a consulta interna retornar um registro único ou múltiplo, o operador retornará true, caso contrário, retornará false quando nenhum registro for encontrado.

Esse operador também é eficiente, pois interrompe o processamento assim que o primeiro evento verdadeiro é detectado.

A seguir está a sintaxe do operador EXISTS:
SELECT column_names    
 FROM table_name    
 WHERE NOT EXISTS (    
 SELECT column_names     
 FROM table_name     
 WHERE condition    
 ); 

Exemplo:

Vamos considerar a seguinte tabela Customer.
Cust_id Nome Ocupação Idade
101 Harry Engenheiro 32
102 Rony Desenvolvedor 30
103 Dobby Líder 28
104 Alvo Cientista 45
105 Snap Carpinteiro 26
106 Gengibre Ator 25
107 NULO NULO NULO

Vamos considerar outra tabela Orders.
ID_do pedido Cust_id Nome_do_produto Data_do pedido
1 101 Computador portátil 2021-01-10
2 103 Computador 2021-02-12
3 106 IPhone 2021-02-15
4 104 Celular 2021-03-05
5 102 TV 2021-03-20

Consulta:
SELECT Name, Occupation
 FROM Customer    
 WHERE EXISTS (
 SELECT *
 FROM Orders     
 WHERE Customer.Cust_id = Orders.Cust_id
 ); 

A consulta acima retornará o nome e a ocupação de todos os clientes que fizeram pelo menos um pedido.

Saída:
Nome Ocupação
Harry Engenheiro
Rony Desenvolvedor
Dobby Líder
Alvo Cientista
Gengibre Ator

Tabela de diferenças entre o operador IN e EXISTS


As principais diferenças entre o operador IN e o operador EXISTS estão listadas abaixo de forma tabular:
Operador IN Operador EXISTS
Minimiza o uso das condições OR. Verifica a existência de um registro na consulta interna.
Ele compara os valores da consulta interna com o valor da consulta externa. Não compara os valores entre a consulta interna e a subconsulta.
Verifica todos os valores dentro do bloco da cláusula IN. Ele interrompe qualquer execução adicional assim que a primeira condição verdadeira for atendida.
Pode retornar VERDADEIRO, FALSO ou NULO. Ele retorna VERDADEIRO ou FALSO.
Pode ser usado para verificar valores NULL. Não pode ser usado para verificar valores NULL.
É usado com subconsultas e valores. É usado apenas com subconsultas.
A execução é mais rápida quando o resultado da consulta interna é menor. A execução é mais rápida mesmo quando o resultado da consulta interna é grande. É mais eficiente que o operador IN.
Sintaxe :SELECT column_names FROM table_name WHERE column_name IN (subconsulta); Sintaxe :SELECT column_namesFROM table_nameWHERE [NOT] EXISTS (subconsulta);

Conclusão:

Neste tópico, foi feita uma comparação entre o operador IN e os operadores EXISTS do SQL. Ambos os operadores fazem a mesma operação, mas seu funcionamento interno é diferente. Eles têm um funcionamento lógico diferente. Qualquer um deles pode ser selecionado de acordo com a exigência. Mas, se o conjunto de dados for grande, é sempre recomendável usar o operador EXISTS.