我在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。我们在这里将无值与字符进行比较。有人可以解释一下为什么它不能那样工作吗?
在MySQL中,NULL与没有值相反,它被视为“缺少的未知值”。看一下有关NULL的MySQL参考。
NULL
与的任何算术比较NULL都不会返回true或false,而是返回NULL.。因此,NULL != 'C'返回NULL,而不是返回true。
NULL != 'C'
与“ NULL”的任何算术比较将返回false。要在SQL中进行检查:
SELECT IF(NULL=123,'true','false')
要检查NULL值,我们需要使用IS NULL&IS NOT NULL运算符。
IS NULL
IS NOT NULL