【发布时间】:2017-08-02 10:40:08
【问题描述】:
-
从 DUAL 中选择 DUMMY 其中 DUMMY 不为 NULL;
结果:返回“X”;
-
从 DUAL 中选择 DUMMY WHERE DUMMY NOT IN NULL;
结果:什么都不返回。
【问题讨论】:
标签: oracle
从 DUAL 中选择 DUMMY 其中 DUMMY 不为 NULL;
结果:返回“X”;
从 DUAL 中选择 DUMMY WHERE DUMMY NOT IN NULL;
结果:什么都不返回。
【问题讨论】:
标签: oracle
在 Oracle 中,二进制表达式可以评估为三种状态:TRUE、FALSE 和 NULL,其中 NULL 可以被认为与未定义或未知值相同。对NULL 值应用二元运算将给出NULL 输出(而不是,如您所料,TRUE 或FALSE):
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,而NOT NULL 又计算为NULL。由于WHERE 过滤器的计算结果为非TRUE 值,因此该行被排除在外。
IS NULL 操作专门用于测试一个值是否为 NULL,并且会在相等 = 运算符或 IN 运算符不会的情况下执行您想要的操作。
所以:
Boolean Operation Result
----------------- ------
NULL = NULL NULL
NULL IN ( NULL ) NULL
NULL IS NULL TRUE
【讨论】:
NULL 是一个特殊字符,并且不为零。它表示缺少真实数据(包括零和空格的数据)。
【讨论】: