SQL不等于不返回NULL结果

Kev*_*vin 12 mysql sql

table 'materials'
id   sku  content
10   IT2   Iron
11   IT3   Steel
12   IT4   Steel
13   IT5   NULL
14   IT6   Iron
15   IT7   Glass

select id, sku, content from materials where content !='Iron';
Run Code Online (Sandbox Code Playgroud)

返回结果:

id   sku   content
11   IT3   Steel
12   IT4   Steel
15   IT7   Glass
Run Code Online (Sandbox Code Playgroud)

为什么在结果集中没有返回NULL值的id#13?使用MYSQL.

Vam*_*ala 17

根据你的where子句进行比较null != 'Iron',它根据SQL的3路逻辑评估为UNKNOWN,既不是真的也不是假的.因此查询不会返回它.

如果您需要生成null行,则应使用

where content !='Iron' or content is null
Run Code Online (Sandbox Code Playgroud)

编辑:另一个选项是使用<=>带有否定的关系null安全相等运算符.

not content <=> 'Iron'
Run Code Online (Sandbox Code Playgroud)

从文档中,

NULL安全相等.此运算符执行与=运算符类似的相等比较,但如果两个操作数均为NULL,则返回1而不是NULL;如果一个操作数为NULL,则返回0而不是NULL.

<=>运算符等同于标准SQL IS NOT DISTINCT FROM运算符.

mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
        -> 1, 1, 0
mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;
        -> 1, NULL, NULL
Run Code Online (Sandbox Code Playgroud)