我正在读甲骨文文档在 ANY 和 ALL 运算符上。我很了解它们的用途,除了一件事。它指出:
ALL :
如果子查询返回零行,则条件计算结果为 TRUE。
ANY :
如果子查询返回零行,则条件计算结果为 FALSE。
对我来说这似乎不太符合逻辑。为什么空子查询上的 ALL 将返回 TRUE,而 ANY 将返回 FALSE?
我对 SQL 比较陌生,所以我认为它会有一个这种行为的用例,这对我来说确实违反直觉。
空集上的 ANY 和 ALL 应该返回相同的值,不是吗?
考虑以下示例EMP
该链接中的表。
具体来说这个查询 -
SELECT e1.empno, e1.sal
FROM emp e1
WHERE e1.sal > ANY (SELECT e2.sal
FROM emp e2
WHERE e2.deptno = 20);
如果是 ANY,您要问的问题是“我的薪水是否比 20 部门中的任何人(至少 1 人)都高”。这意味着你希望最后一个别人的工资比你低。当没有行时,返回FALSE
因为没有人的薪水比你低,你希望至少有一个。
如果是 ALL,您会问的一个明显问题是“我的薪水比每个人都高吗?”。将其改写为“没有人的薪水比我高吗?”当没有返回行时,你的答案是TRUE
,因为“确实没有人的工资比我高。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)