Oracle
 sql >> Database >  >> RDS >> Oracle

Operatore ALL VS Any su una query vuota

Considera l'esempio di EMP tabella in quel link.

In particolare questa query -

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

In caso di QUALSIASI, la domanda che stai ponendo è "Il mio stipendio è maggiore di chiunque altro nel dipartimento 20 (almeno 1 persona)". Ciò significa che speri almeno uno persona ha uno stipendio inferiore a te. Quando non ci sono righe, restituisce FALSE perché non c'è nessuno il cui stipendio è inferiore a te, speravi almeno in uno.

Nel caso di TUTTI, la domanda ovvia che ti faresti è "Il mio stipendio è maggiore di tutti?". Riformulandolo come "Non c'è nessuno che ha uno stipendio maggiore di me?" Quando non ci sono righe restituite, la tua risposta è TRUE , perché "non c'è davvero nessuno il cui stipendio sia maggiore di me.