mysql/SQL server有,clickhouse也有,hive未验证。
null 值的比较这里另外说下 SQL 里 null 值的比较,任何与 null 值的比较结果,最后都会变成 null,以PostgreSQL为例,如下:select null != null;
select null = null;
select null > 1;
select null <> 1;
以上结果都是 null,而不是什么 true 或者 false。另外有些函数是不支持 null 值作为输入参数的,比如count()或者sum()等。
在写 SQL 条件语句时经常用到 不等于 != 的筛选条件。此时要注意此条件会将字段为 Null 的数据也当做满足不等于的条件而将数据筛选掉。(也就是说会忽略过滤掉为 null 的数据,导致数据不准确)。
SELECT * FROM A WHERE B1 != 1
不会查出null值
修改:
SELECT * FROM A WHERE B1 != 1 OR B1 is Null
SELECT * FROM A WHERE IFNULL(B1,'') != 1
为什么会这样呢?这还得从 mysql 的底层开始说起,因为 NULL 不是一个「值」,而是「没有值」。
「没有值」不满足「值不等于1」这个条件,怎么解决可以使用 ifnull() 方法,将 null 转为空字符串,或者这个字段做出判断 加上OR a is null。当然使用 ifnull 相率会更好
select null = null返回也是null。null只能用is或is not