对数据进行清洗过滤的时候,NULL往往是一个很特殊的存在,对NULL值的存在通常有以下三种方式
1、保留NULL
2、过滤掉NULL
3、将NULL替换为其他符合业务需求的默认常量
下面是一些常用处理NULL的方式:
如下图所示数据源:
car_vin:汽车车架号,汽车的唯一标识
id:汽车检测里程的id,每次检测的唯一标识
mileage:汽车的行驶里程
SELECT * FROM tmp;
一、WHERE
这部分讲解在WHERE子句中如何对NULL值进行处理
1、IS NULL 、IS NOT NULL
SELECT car_vin
,id
,mileage
FROM tmp
WHERE mileage IS NOT NULL
;
SELECT car_vin
,id
,mileage
FROM tmp
WHERE mileage IS NULL
;
2、!=
在where子句中用到!=
号,后面接过滤条件,此时NULL值也会被过滤
SELECT car_vin
,id
,mileage
FROM tmp
WHERE mileage !=0
;
从下图的结果可以看出,除了0值,NULL同样被过滤掉了
由于 NULL 的特殊性质,在 SQL 中,任何与 NULL 进行比较的结果都是 NULL。这意味着在条件 mileage != 0 中,如果 mileage 是 NULL,这个表达式的结果不会返回 true,而是返回 NULL。where子句中只返回结果为true的行,因此,该行记录不会被选中,即NULL值会被过滤掉。
WHERE mileage !=0 只会返回 mileage 不为 0 的记录,但也会排除掉 mileage 为 NULL 的记录。因此,mileage 为 NULL 的行不会出现在查询结果中。
3、NOT IN
使用 NOT IN 同样会过滤掉NULL值
SELECT car_vin
,id
,mileage
FROM tmp
WHERE mileage NOT IN (0)
;
在 SQL 中,任何与 NULL 进行比较的结果都是 NULL
SELECT NULL NOT IN (0);
返回的结果依旧为NULL
所以使用NOT IN
,NULL值所在的行不满足返回结果为TRUE的条件,会被过滤掉。
二、函数
1、NVL()
当您在查询中希望用一个具体的值来代替NULL值时,使用NVL函数可将NULL值替换为指定的值,确保在执行数据分析或生成报告时,结果中不会有意外的空值。
命令格式
nvl(T <value>, T <default_value>)
参数说明
value:必填。输入参数。T指代输入数据类型,可以是当前使用的数据库或计算引擎支持的所有数据类型。
default_value:必填。替换后的值。必须与value的数据类型保持一致。
返回值说明
如果value值为NULL,返回default_value,否则返回value,函数的两个参数的数据类型必须一致。