在测试数据时忽然发现,使用如下的SQL是无法查询到对应column为null的数据的:
1 | select * from test where name != 'Lewis'; |
|---|
本意是想把表里name的值不为Lewis的所有数据都搜索出来,结果发现这样写无法把name的值为null的数据也包括进来。
上面的!=换成<>也是一样的结果,这可能是因为在数据库里null是一个特殊值,有自己的判断标准,如果想要把null的数据也一起搜索出来,需要额外加上条件,如下:
1 | select * from test where name != 'Lewis' or name is null; |
|---|
虽然这只是个小知识点,不过还是值得记录注意下,以免日后在开发中犯小错误。
这里另外说下SQL里null值的比较,任何与null值的比较结果,最后都会变成null,以PostgreSQL为例,如下:
1 2 3 4 | select null != null; select null = null; select null > 1; select null <> 1; |
|---|
以上结果都是null,而不是什么true或者false。另外有些函数是不支持null值作为输入参数的,比如count()或者sum()等。
警告
本文最后更新于 November 12, 2019,文中内容可能已过时,请谨慎使用。