【SQL|大数据|数据清洗|过滤】where条件中 “ != “ 和 “ NOT IN() ” 对NULL的处理

对数据进行清洗过滤的时候,NULL往往是一个很特殊的存在,对NULL值的存在通常有以下三种方式

1、保留NULL

2、过滤掉NULL

3、将NULL替换为其他符合业务需求的默认常量

下面是一些常用处理NULL的方式:

如下图所示数据源:

car_vin:汽车车架号,汽车的唯一标识

id:汽车检测里程的id,每次检测的唯一标识

mileage:汽车的行驶里程

sql 复制代码
SELECT * FROM tmp;

一、WHERE

这部分讲解在WHERE子句中如何对NULL值进行处理

1、IS NULL 、IS NOT NULL

sql 复制代码
SELECT  car_vin
        ,id
        ,mileage
FROM    tmp
WHERE   mileage IS NOT NULL
;
sql 复制代码
SELECT  car_vin
        ,id
        ,mileage
FROM    tmp
WHERE   mileage IS NULL
;

2、!=

在where子句中用到!=号,后面接过滤条件,此时NULL值也会被过滤

sql 复制代码
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值

sql 复制代码
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值替换为指定的值,确保在执行数据分析或生成报告时,结果中不会有意外的空值。

命令格式

sql 复制代码
nvl(T <value>, T <default_value>)

参数说明

value:必填。输入参数。T指代输入数据类型,可以是当前使用的数据库或计算引擎支持的所有数据类型。

default_value:必填。替换后的值。必须与value的数据类型保持一致。

返回值说明

如果value值为NULL,返回default_value,否则返回value,函数的两个参数的数据类型必须一致。

相关推荐
2601_957190902 分钟前
飞行影院安装施工指南:场地、动感系统与影片内容配套
大数据·前端·人工智能
ACP广源盛1392462567314 分钟前
IX9104 PCIe5.0 交换芯片@ACP#国产高端 AI PC 全搭配方案
大数据·人工智能·分布式·单片机·嵌入式硬件
吠品1 小时前
PG_GBK 与 PG_UTF8 编码冲突:一次数据导入踩坑复盘
数据库
lld9510271 小时前
我做了一个 AI Agent Skill 云:用 MCP 在 Claude Code、Codex、OpenCode 之间同步技能
数据库·人工智能
讯展互联1 小时前
实体业态运营效率分析:装修门店投放自主与外包的人力模型对比
大数据·网络·经验分享·创业创新·学习方法
人民新视野1 小时前
2026防尘口罩品牌推荐:三大防尘口罩品牌实用指南
大数据
Lucky_luckyZzz2 小时前
销售会话分析与智能工牌实测红榜:灵听工牌如何成为B2B销售效率提升的选型标杆?
大数据·人工智能
江瀚视野2 小时前
京东快递推行业首个寄文件证照送保价,京东如何改变市场?
大数据
ttwuai2 小时前
GoFrame 连接 MySQL 报错排查:parseTime、时区和 utf8mb4 怎么配
数据库·mysql·adb
辉灰笔记2 小时前
MySQL8 意外关机/误移data目录导致服务启动失败 PID报错/权限报错 修复文档
linux·数据库·mysql·centos