Diferenças entre os operadores EXISTS e IN no SQL

Autor: Laura McKinney
Data De Criação: 10 Abril 2021
Data De Atualização: 25 Novembro 2024
Anonim
Diferenças entre os operadores EXISTS e IN no SQL - Artigos
Diferenças entre os operadores EXISTS e IN no SQL - Artigos

Contente

Um desafio constante no uso de SQL é a determinação do uso adequado dos operadores EXISTS e IN. Os dois operadores podem produzir os mesmos resultados, mas nem sempre. Além disso, há um debate considerável sobre a forma como cada operador é otimizado para velocidade. Os usuários devem entender os diferentes atributos de cada operador e experimentar os dois para determinar a utilização apropriada.


Considere seus objetivos em SQL ao escolher EXISTS ou IN (Jupiterimages/Photos.com/Getty Images)

Operador IN

O operador IN retorna uma linha se o valor do campo de uma tabela satisfaz a condição WHERE em uma lista de valores IN. Ele é normalmente usado como parte de uma consulta principal ou em conjunto com uma subconsulta.

Exemplo 1: WHERE tabela.campo IN ('a', 'b', 'c') Exemplo 2: WHERE tabela.campo IN (Subconsulta que retorna um conjunto)

Operador EXISTS

O operador EXISTS retorna todas as linhas principais se uma subconsulta contém alguma linha. Ele é usado apenas em conjunto com uma subconsulta. As linhas retornadas são determinadas pelo filtro na consulta principal.

Exemplo: WHERE EXISTS (Subconsulta que retorna um conjunto)

Diferença

O operador IN não pode avaliar valores NULL, portanto tais linhas sempre serão falsas, e não serão retornadas, ao contrário do operador EXISTS, que avalia e retorna linhas com valor NULL.


Similaridades

Ambos EXISTS e IN suportam subconsultas correlacionadas e não correlacionadas, e ambos podem produzir resultados semelhantes. Quando correlacionados, eles satisfazem um campo de consulta principal para um campo de subconsulta (ex: principal.id = subconsulta.id). A subconsulta avalia linha por linha, para cada ocorrência encontrada. Neste caso, IN e EXISTS retornarão as mesmas linhas com base em condições "id" semelhantes. Quando não correlacionados, os dois operadores processam suas subconsultas e então combinam os resultados para a consulta principal.

Performance

O desempenho é determinado pelo otimizador do banco de dados e o plano de execução utilizado para o código executado. Para EXISTS e IN, o otimizador pode escolher caminhos diferentes. No Oracle, o NOT EXISTS normalmente é mais rápido do que o NOT IN. No final, algumas tentativas e erros são necessárias para classificar o caminho mais curto, dependendo da base de dados e a versão que está sendo usada. Certifique-se de usar o operador que garanta os resultados corretos em primeiro lugar, e em seguida tente substituir os operadores para ver qual é o mais rápido.