SELECT * FROM hr.NullValueCheck
ID Name
1 abc
2 abc
3 bcd
4 cde
https://oracle-base.com/articles/misc/all-any-any-some-comparison-conditions-in-sql
查询1:
SELECT *
FROM hr.NullValueCheck
where id > All (SELECT NULL FROM DUAL )
什么都没来。
但在Quesry下。所有记录都在返回时,所有记录都与上述查询(从dual中选择null(
相同。查询2:
SELECT *
FROM hr.NullValueCheck
where id > All (SELECT id from hr.NullValueCheck where id = 5)
请向我解释为什么查询1返回没有记录,但是查询2正在返回所有记录。
根据我的知识查询1也应返回所有记录。
NULL
与空集不同。
第一个示例是:"在ID大于NULL
的所有值大的情况下选择所有行。或更简单," ID大于'null'。
在SQL中,'NULL'
通常具有"未知"的语义。如果您不知道该值,那么您就不知道给定的id
是否更大。因此,没有返回行。
在第二个示例中,具有一个空集以进行比较。空集不是NULL
。显然,任何数字都大于空集中的所有数字。因此,返回所有行。