我正在阅读关于ANY和ALL运算符的oracle文档.除了一件事,我非常了解他们的用途.它指出:
全部:
如果子查询返回零行,则条件的计算结果为TRUE.
任何 :
如果子查询返回零行,则条件的计算结果为FALSE.
这对我来说似乎不合逻辑.为什么空子查询中的ALL将返回TRUE但是ANY返回FALSE?
我对SQL比较陌生,所以我认为它会对这种行为有一个用例,这对我来说是非常直观的.
空集上的ANY和ALL应该返回相同的值no?
因为ANY被解释为EXIST(如果有,则意味着它们存在)。因此,如果未找到行,则返回 false。
All不证明任何值存在,它只是证明它代表所有可能的值。因此,即使没有找到行,它也会返回 true。
考虑该EMP链接中表格的示例.
特别是这个查询 -
SELECT e1.empno, e1.sal
FROM emp e1
WHERE e1.sal > ANY (SELECT e2.sal
FROM emp e2
WHERE e2.deptno = 20);
Run Code Online (Sandbox Code Playgroud)
如果是的话,你问的问题是"我的薪水是否比20级(至少1人)的任何人都高".这意味着你希望至少有一个人的薪水低于你.当没有行时,这会返回,FALSE因为没有人的工资低于你,你希望至少有一个.
如果是ALL,你会问的一个显而易见的问题是"我的薪水是否超过每个人?".将其描述为"没有人的工资比我高吗?" 当没有返回任何行时,你的答案是TRUE,因为"确实没有人的工资比我大.
| 归档时间: |
|
| 查看次数: |
1443 次 |
| 最近记录: |