与Oracle SQL中的所有共同操作器一样,无效的行为


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 。显然,任何数字都大于空集中的所有数字。因此,返回所有行。

相关内容

  • 没有找到相关文章