Os operadores ALL e ANY são utilizados em conjunto com subconsultas para comparar um valor com vários valores retornados por outra consulta.
Eles permitem criar comparações mais avançadas utilizando operadores como >, <, =, >= e <=.
O operador ALL exige que a condição seja verdadeira para todos os valores retornados pela subconsulta.
valor > ALL
(
SELECT coluna
FROM tabela
);
Significa: o valor deve ser maior que todos os valores retornados.
Encontrar funcionários que ganham mais que todos os salários do setor comercial.
SELECT nome, salario
FROM funcionarios
WHERE salario > ALL
(
SELECT salario
FROM funcionarios
WHERE setor = 'Comercial'
);
Salários Comercial:
3000
4000
5000
Consulta:
salario > ALL
Resultado:
Precisa ser maior que 5000
O operador ANY retorna verdadeiro quando a comparação é satisfeita por pelo menos um valor da subconsulta.
valor > ANY
(
SELECT coluna
FROM tabela
);
Significa: o valor deve ser maior que pelo menos um valor retornado.
Encontrar funcionários que ganham mais que algum funcionário do setor comercial.
SELECT nome, salario
FROM funcionarios
WHERE salario > ANY
(
SELECT salario
FROM funcionarios
WHERE setor = 'Comercial'
);
Salários Comercial:
3000
4000
5000
Consulta:
salario > ANY
Resultado:
Precisa ser maior que 3000
| ALL | ANY |
|---|---|
| Todos os valores | Pelo menos um valor |
| Mais restritivo | Menos restritivo |
| Semelhante ao maior/menor valor | Semelhante a uma comparação parcial |
Algumas consultas com ALL e ANY podem ser substituídas por funções de agregação.
-- Usando ALL
salario > ALL(subconsulta)
-- Equivalente
salario > MAX(salario)
-- Usando ANY
salario > ANY(subconsulta)
-- Equivalente
salario > MIN(salario)
| Operador | Exemplo |
|---|---|
| > | Maior que valores |
| < | Menor que valores |
| = | Igual aos valores |
| >= e <= | Comparações completas |
| Sistema | Exemplo |
|---|---|
| RH | Comparar salários |
| Financeiro | Comparar valores de transações |
| E-commerce | Analisar preços |
| Relatórios | Comparações estatísticas |
| Erro | Problema |
|---|---|
| Confundir ALL com ANY | Resultado incorreto |
| Usar sem subconsulta | Erro de sintaxe |
| Comparar tipos diferentes | Falha na execução |
| Ignorar NULL | Resultado inesperado |