Oracle
 sql >> Base de données >  >> RDS >> Oracle

ALL opérateur VS Any sur une requête vide

Prenons l'exemple du EMP tableau dans ce lien.

Plus précisément cette requête -

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

Dans le cas de TOUT, la question que vous posez est "Est-ce que mon salaire est supérieur à celui de n'importe qui dans le département 20 (au moins 1 personne)". Cela signifie que vous espérez au moins un personne a un salaire inférieur à vous. Lorsqu'il n'y a pas de lignes, cela renvoie FALSE parce qu'il n'y a personne dont le salaire est inférieur à vous, vous en espériez au moins un.

En cas de TOUS, la question évidente que vous vous posez est "Est-ce que mon salaire est supérieur à celui de tout le monde?". Reformuler cela comme "Y a-t-il personne qui a un salaire supérieur à moi ?" Lorsqu'aucune ligne n'est renvoyée, votre réponse est TRUE , car "il n'y a en effet personne dont le salaire est supérieur à moi.