在Oracle SQL中,null = null吗?

LPB*_*LPB 0 mysql oracle null

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

我的问题是:

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

Row 1: ItemID = 1, CollectionID = 1, Price = null
Row 2: ItemID = 2, CollectionID = 1, Price = null
Run Code Online (Sandbox Code Playgroud)

我的查询如下:

SELECT CollectionID
  FROM my_table TB
 WHERE Price >= (SELECT avg(Price)
                   FROM my_table 
                  WHERE TB.CollectionID = CollectionID);
Run Code Online (Sandbox Code Playgroud)

collectionID 1在结果中显示吗?换句话说,我们有for 和for的值.TB.CollectionIDCollectionID

TB.CollectionID = CollectionID吗?

pax*_*blo 9

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

那是因为NULL不是一个价值,而是一个意味着"未知","不可用"或"不适用"的实体.

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

where something is null
Run Code Online (Sandbox Code Playgroud)

而不是:

where something = null
Run Code Online (Sandbox Code Playgroud)

如果您确实希望将NULL值视为相等,则可以执行以下操作:

where TB.CollectionID = CollectionID
   or (TB.CollectionID is null and CollectionID is null)
Run Code Online (Sandbox Code Playgroud)

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

而且,顺便说一句,不要让你自己系统上缺乏权力限制你可以做的事情.例如,请参阅SqlFiddle,它可以让您随意创建和操作数据库.


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

(b)或者也许在这种情况下,说它开始NULL并结束时更有意义oracle:-)