Operadores SQL: Correspondência de vários valores com ANY e ALL


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: Correspondência de vários valores com ANY e ALL

Outra maneira de verificar os dados é usar os comandos ANY e ALL.

Esses comandos não são usados ​​com frequência, mas é bom saber caso você encontre algum código que os use.

SQL ALL Comparação

A comparação SQL ALL é usada para verificar se uma expressão corresponde a todos os valores em uma lista.

Pode ser usado com qualquer um dos operadores básicos: =, <>, >, <, >=, <=.

Se parece com isso:

WHERE expressão = ALL (valores)

Internamente, essa expressão é traduzida em várias cláusulas WHERE usando a palavra-chave AND.

Então, uma consulta como esta:

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE first_name = ALL ('John', 'Mary', 'Susan', 'Mark')

É o mesmo que esta consulta:

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

Agora, olhando para essa consulta, não há como um primeiro nome ser igual a todos esses valores.
Portanto, esta consulta não retornaria resultados.

Mas a palavra-chave ALL talvez seja melhor usada com outro operador.

Por exemplo:

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE id > ALL (3, 8, 15);

Isso é o mesmo que esta consulta:

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE id > 3
   AND id > 8
   AND id > 15;

Usando ALL, o critério só precisa verificar o valor mínimo ou máximo.
Neste exemplo, se um id for maior que 15, ele é maior que 3 e 8, então as verificações de 3 e 8 não são necessárias.
A consulta poderia ser escrita como:

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE id > 15;

Mas é assim que você usa o operador ALL.
Pelo que vi, não é usado com muita frequência, mas é bom saber o que é.

SQL ANY Comparação

A comparação SQL ANY é semelhante a ALL.
É usado para verificar se uma expressão corresponde a todos os valores em uma lista.

Pode ser usado com qualquer um dos operadores básicos: =, <>, >, <, >=, <=.

Se parece com isso:

WHERE expressão = ANY (valores)

Internamente, essa expressão é traduzida em várias cláusulas WHERE usando a palavra-chave OR (o operador ALL usou a palavra-chave AND).

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE first_name = ANY ('John', 'Mary', 'Susan', 'Mark');

É o mesmo que esta consulta:

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

Também pode ser escrito como uma consulta IN:

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

Se você usar outro operador, como menor que, a palavra-chave ANY pode ter esta aparência:

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE id < ANY (4, 9, 16);

Isso também pode ser escrito assim:

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE id < 4
    OR id < 9
    OR id < 16;

Como um valor menor que 4 também é menor que 9 e 16, eles podem ser removidos.
Esta consulta retornará os mesmos resultados:

SELECT id
,      first_name
,      last_name
  FROM customer
 WHERE id < 4;

Resumo de ALL e ANY

Os resultados de diferentes combinações de ANY e ALL podem ser resumidos da seguinte forma:

Critério Resultado
= ALL () O valor deve corresponder a todos os valores na lista.
<> ALL () O valor não deve corresponder a nenhum dos valores na lista.
> ALL () O valor deve ser maior que o maior valor na lista.
< ALL () O valor deve ser menor que o menor valor na lista.
>= ALL () O valor deve ser maior ou igual ao maior valor na lista.
<= ALL () O valor deve ser menor ou igual ao menor valor na lista.
= ANY () O valor deve corresponder a um ou mais valores na lista.
<> ANY () O valor não deve corresponder a um ou mais valores na lista.
> ANY () O valor deve ser maior que o menor valor na lista.
< ANY () O valor deve ser menor que o maior valor na lista.
>= ANY () O valor deve ser maior ou igual ao menor valor na lista.
<= ANY () O valor deve ser menor ou igual ao maior valor na lista.

Como mencionado anteriormente, você provavelmente não achará necessário usar essa sintaxe com muita frequência, mas é bom saber que ela existe.

Mais Informações

Aqui estão mais alguns artigos sobre ANY e ALL:


Copyright de Ben Brumm - DatabaseStar