Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ALL operador VS Qualquer em uma consulta vazia


Considere o exemplo do EMP tabela nesse link.

Especificamente esta consulta -
SELECT e1.empno, e1.sal
FROM   emp e1
WHERE  e1.sal > ANY (SELECT e2.sal
                     FROM   emp e2
                     WHERE  e2.deptno = 20);

No caso de QUALQUER, a pergunta que você está fazendo é "Meu salário é maior do que qualquer um no departamento 20 (pelo menos 1 pessoa)". Isso significa que você espera pelo menos um pessoa tem um salário menor do que você. Quando não há linhas, isso retorna FALSE porque não há ninguém cujo salário seja menor do que você, você esperava pelo menos um.

No caso de ALL, a pergunta óbvia que você estaria fazendo é "Meu salário é maior que o de todos?". Reformulando isso como "Não há ninguém que tenha salário maior do que eu?" Quando não há linhas retornadas, sua resposta é TRUE , porque "não há de fato ninguém cujo salário seja maior do que eu.