一尘不染

MySQL比较具有空值

mysql

我在MySQL表中有一个名为CODE的列,该列可以为NULL。假设我有一些带有CODE
=’C’的行,我想在选择的结果集中忽略它们。我的结果集中可以有CODE = NULL或CODE!=’C’。

以下查询不返回CODE为NULL的行:

SELECT * from TABLE where CODE!='C'

但是此查询按预期工作,我知道这是正确的方法。

SELECT * from TABLE where CODE IS NULL OR CODE!='C'

我的问题是为什么只有CODE!=’C’不会返回CODE = NULL的行?绝对“
C”不是NULL。我们在这里将无值与字符进行比较。有人可以解释一下为什么它不能那样工作吗?


阅读 327

收藏
2020-05-17

共1个答案

一尘不染

在MySQL中,NULL与没有值相反,它被视为“缺少的未知值”。看一下有关NULL的MySQL参考

与的任何算术比较NULL都不会返回true或false,而是返回NULL.。因此,NULL != 'C'返回NULL,而不是返回true。

与“ NULL”的任何算术比较将返回false。要在SQL中进行检查:

SELECT IF(NULL=123,'true','false')

要检查NULL值,我们需要使用IS NULLIS NOT NULL运算符。

2020-05-17