为什么SELECT*FROM表WHERE值!='1'不返回NULL字段?

Rom*_*man 1 mysql

我有一个包含以下数据的表:

id | value
 1 | 1
 2 | NULL
 3 | NULL
Run Code Online (Sandbox Code Playgroud)

我的查询:

SELECT * FROM table WHERE value != '1'
Run Code Online (Sandbox Code Playgroud)

结果为空.

为什么查询不返回行23

Gio*_*sos 6

value等于NULL谓词变为:NULL != '1'.这可以评估NULL,而不是true像人们预期的那样.

这就是所谓的SQL 三值逻辑:表达式的计算结果为true或false,或者 NULL.

要正确检查NULL您需要使用IS NULL:

WHERE (value != '1') OR (value IS NULL)
Run Code Online (Sandbox Code Playgroud)