在Oracle SQL中,null = null吗?

时间:2015-02-16 03:43:20

标签: mysql oracle null

我无法测试null = null,因为我没有权限在我使用的数据库上创建数据。

我的问题是:

如果我有一个包含两行的表:

Row 1: ItemID = 1, CollectionID = 1, Price = null
Row 2: ItemID = 2, CollectionID = 1, Price = null

我的查询如下:

SELECT CollectionID
  FROM my_table TB
 WHERE Price >= (SELECT avg(Price)
                   FROM my_table 
                  WHERE TB.CollectionID = CollectionID);

结果中会显示collectionID 1吗? 换句话说,我们为TB.CollectionIDCollectionID提供了 null 值。

TB.CollectionID = CollectionID

1 个答案:

答案 0 :(得分:9)

不,NULL等于没有其他值,包括NULL的另一个实例(一般来说这适用于SQL,而不仅仅是Oracle (a))。

那是因为NULL 不是一个值,而是一个实体,意思是“未知”,“不可用”或“不适用”。

这就是为什么,如果你想检查某些东西是否为NULL,你可以使用:

where something is null

而不是:

where something = null

如果 想要将NULL值视为相等,则可以执行以下操作:

where TB.CollectionID = CollectionID
   or (TB.CollectionID is null and CollectionID is null)

但这与SQL三值逻辑的整个概念背道而驰。

  

另外,不要让你的自己的系统缺乏权力限制你可以做的事情。例如,请参阅SqlFiddle,它可以让您随意创建和操作数据库。


(a)当然,有些DBMS并不总是以有意义的方式遵循标准,例如某个大型供应商(没有名字,但它以o开头,以racle (b)结束,无法将零长度字符串存储到varchar类型字段中,而是将其强制转换为NULL: - )

(b)或者在这种情况下,说它以NULL开头并以oracle结尾更有意义: - )