Operadores SQL: verificando listas de valores com IN e NOT IN - www.cadcobol.com


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

Operadores SQL: verificando listas de valores com IN e NOT IN

Se você estiver escrevendo uma consulta que possui um valor que deseja verificar, pode ser uma cláusula WHERE simples para escrever:

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE first_name = 'John';

E se você quiser encontrar registros que correspondam a várias condições?

Você pode usar a palavra-chave OR para verificar se um valor corresponde a um ou mais valores.

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE first_name = 'John'
    OR first_name = 'Mary'
    OR first_name = 'Susan';

Isso não é tão ruim quando há apenas uma pequena lista.
Mas pode ficar confuso quando a lista fica mais longa.

Certamente há uma maneira melhor!

Sim existe!

É chamada de palavra-chave IN.

A palavra-chave SQL IN

A palavra-chave IN no SQL permite verificar se uma expressão corresponde a algum dos valores especificados, em um único critério.
Evita a necessidade de muitas cláusulas WHERE separadas e tem algumas outras vantagens.

Você usa a palavra-chave IN, com alguns colchetes, e especifica seus valores dentro desses colchetes.

WHERE expressão IN (valor_1, valor_n….)

Você pode colocar muitos valores dentro dos colchetes – até 1.000, na verdade.

Portanto, para reescrever o exemplo anterior para usar a cláusula IN, ficaria assim:

SELECT id
,      first_name
,      last_name
  FROM customer
  WHERE first_name IN ('John', 'Mary', 'Susan');

Isso mostrará todos os clientes que têm o primeiro nome de John, Mary ou Susan.

Isso executará uma correspondência "igual a".
Ele verificará se o first_name é igual a algum desses valores.

Se você deseja executar outros operadores, como maior que, leia a seção ANY e ALL abaixo.

Então, por que você usaria a palavra-chave IN?

  • É mais fácil digitar quando você tem mais de um valor para verificar.
  • É mais fácil adicionar e remover valores de sua consulta, em vez de remover linhas inteiras de uma cláusula WHERE.
  • Ele pode ser usado com vários valores de subconsultas.

Uma maneira comum de usar a cláusula IN é usar subconsultas. Terei um guia sobre subconsultas em breve que se aprofundará nesse tópico, mas uma subconsulta é uma consulta dentro de outra consulta.

Usá-lo com uma palavra-chave IN pode ser assim:

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE first_name IN (
       SELECT first_name
         FROM common_names );

Isso significa que todos os valores first_name na tabela common_names serão usados ​​como entrada na cláusula WHERE da tabela customer.

Agora, este pode não ser o exemplo mais realista, mas é usado apenas para demonstrar o conceito.

A palavra-chave SQL NOT IN

Acabamos de ver a palavra-chave IN, que verifica se um valor corresponde a um intervalo de valores.

E se quisermos encontrar registros que não correspondem a um intervalo de valores?

Podemos fazer isso com a palavra-chave NOT IN.

No SQL, muitas das palavras-chave podem ser invertidas adicionando a palavra NOT antes delas, como você verá neste artigo.

Assim, enquanto o IN age como um = em vários valores, o NOT IN age como um <> em vários valores.

WHERE expressão NOT IN (valor_1, valor_n…)

Assim como o IN, você pode colocar até 1.000 valores dentro da cláusula NOT IN.

Digamos que você tenha uma consulta como esta:

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE first_name <> 'John'
   AND first_name <> 'Mary'
   AND first_name <> 'Susan';

Isso localizaria todos os registros do cliente em que o nome não é John, nem Mary e nem Susan.

Este exemplo usa AND porque queremos encontrar registros que não correspondam a todos esses valores.

Podemos converter isso em NOT IN adicionando os valores dentro dos colchetes.

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE first_name NOT IN ('John', 'Mary', 'Susan');

Isso nos mostraria os mesmos resultados.

NOT IN também pode ser usado com subconsultas da mesma forma que IN:

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE first_name NOT IN (
       SELECT first_name
         FROM common_names );

Isso significa que todos os valores first_name na tabela common_names serão usados ​​como uma entrada na cláusula WHERE da tabela customer, e todos os registros do cliente que não corresponderem a esses valores serão retornados.

Mais Informações

Aqui estão mais alguns recursos para aprender sobre IN:


Copyright de Ben Brumm - DatabaseStar