" IS NOT NULL"之间有什么区别?并且"不是空的"?为什么这两个Oracle查询返回不同的结果?

时间:2017-08-02 10:40:08

标签: oracle

  1. 从DUAL中选择DUMMY   DUMMY不是空的;

    结果:返回' X';

  2. 从DUAL中选择DUMMY   DUMMY不在空的地方;

    结果:什么都不返回。

2 个答案:

答案 0 :(得分:1)

在Oracle中,二进制表达式可以评估为三种状态:TRUEFALSENULL,其中NULL可以被认为与未定义或未知值相同。将二进制运算应用于NULL值将提供NULL输出(而不是像您预期的那样TRUEFALSE):

Boolean Operation Result
----------------- ------
X = X             TRUE
X = Y             FALSE
X = NULL          NULL
NULL = X          NULL
NULL = NULL       NULL
NULL IN ( NULL )  NULL
NOT TRUE          FALSE
NOT FALSE         TRUE
NOT NULL          NULL

查询:

SELECT DUMMY FROM DUAL WHERE DUMMY NOT IN ( NULL )

相当于:

SELECT DUMMY FROM DUAL WHERE NOT( DUMMY = NULL )

WHERE子句评估NOT( DUMMY = NULL )NOT NULL,后者又评估为NULL。由于WHERE过滤器评估为非TRUE值,因此排除该行。

IS NULL操作专门用于测试某个值是否为NULL,并且会执行您在平等=运算符或IN运算符所不同的位置。< / p>

所以:

Boolean Operation Result
----------------- ------
NULL = NULL       NULL
NULL IN ( NULL )  NULL
NULL IS NULL      TRUE

答案 1 :(得分:0)

  1. DUAL中的DUMMY是varchar2,您从DUAL中选择了所有非空的DUMMY(IS NOT NULL)。 DUAL有一行DUMMY =&#39; X&#39;。
  2. 现在你说DUMMY不是一组NULL,这没有任何意义,而select将不返回任何结果。
  3. NULL是一个特殊字符,不是零。它表示缺少真实数据(包括零和空格的数据)。