Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ALL-Operator VS Any bei einer leeren Abfrage

Betrachten Sie das Beispiel des EMP Tabelle in diesem Link.

Speziell diese Abfrage -

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

Im Falle von ANY lautet die Frage, die Sie stellen:"Ist mein Gehalt höher als das von jemandem in Abteilung 20 (mindestens 1 Person)". Das bedeutet, dass Sie auf mindestens einen hoffen Person hat ein geringeres Gehalt als Sie. Wenn keine Zeilen vorhanden sind, wird FALSE zurückgegeben weil es niemanden gibt, dessen Gehalt niedriger ist als Sie, haben Sie zumindest auf eines gehofft.

Im Falle von ALLEN lautet die offensichtliche Frage, die Sie stellen würden:"Ist mein Gehalt höher als das aller anderen?". Umformuliert in „Gibt es niemanden, der mehr verdient als ich?“ Wenn keine Zeilen zurückgegeben werden, ist Ihre Antwort TRUE , denn „es gibt tatsächlich niemanden, dessen Gehalt höher ist als ich.“