与 Oracle SQL 中的 ALL 等 Compoperator 的 NULL 行为
Posted
技术标签:
【中文标题】与 Oracle SQL 中的 ALL 等 Compoperator 的 NULL 行为【英文标题】:NULL behavior with Comoperator like ALL in Oracle SQL 【发布时间】:2019-08-01 17:13:06 【问题描述】:SELECT * FROM hr.NullValueCheck
ID Name
1 abc
2 abc
3 bcd
4 cde
https://oracle-base.com/articles/misc/all-any-some-comparison-conditions-in-sql
查询 1:
SELECT *
FROM hr.NullValueCheck
where id > All (SELECT NULL FROM DUAL )
什么都不会发生。
但对于以下问题。所有记录都来了,而子查询返回的是 NULL 与上面的查询相同(SELECT NULL FROM DUAL )
查询 2:
SELECT *
FROM hr.NullValueCheck
where id > All (SELECT id from hr.NullValueCheck where id = 5)
请解释一下为什么查询 1 返回 No Records 但查询 2 返回所有记录。
据我所知,查询 1 也应该返回所有记录。
【问题讨论】:
【参考方案1】:NULL
不同于空集。
第一个例子是说:“选择所有 id 大于NULL
的所有值的行”。或者更简单地说,“其中 id 大于 'NULL''。
在 SQL 中,'NULL'
一般具有“未知”的语义。如果您不知道该值,那么您不知道给定的id
是否更大。因此,不会返回任何行。
在第二个示例中,改为有一个空集进行比较。空集不是NULL
。显然,任何数都大于空集中的所有数。因此,将返回所有行。
【讨论】:
以上是关于与 Oracle SQL 中的 ALL 等 Compoperator 的 NULL 行为的主要内容,如果未能解决你的问题,请参考以下文章
Oracle不同版本执行相同SQL语句,结果不一样,请大神赐教
PL/SQL Developer登录出现——Using a filter for all users can lead to poor performance!