SQL中有一条规则:只要有NULL参与的运算其运算结果一定是NULL
以下通过实例来理解这条规则;
现有一张员工信息表(emp),包括了员工姓名(ENAMA)、职位(JOB)、薪资(SAL)、补贴(COMM)等相关信息,注意COMM字段中存在NULL。

查看员工薪资:

计算员工的年薪(包括补贴COMM):

可以看到加上补贴之后,部分员工的年薪是NULL,这个运算结果明显不符合实际,原因在于COMM字段中存在NULL,SQL规定有NULL参与的运算其结果也为NULL。
像上述中计算员工年薪的函数即为“单行处理函数”,单行处理函数的特点是:输入一行,处理一行,处理对象是每一行。
解决单行处理函数空值问题的方法是:ifnull() 函数
使用 ifnull 函数需要传入两个参数:
ifnull(可能出现空值的数据,出现空值时指定被当作什么值处理)

有单行处理函数,对应的也有分组函数—别名“多行处理函数”(count、sum、max、min、avg)。
分组函数无需担心空值问题,SQL规定分组函数自动忽略NULL。
如查看员工津贴(comm)总和:

select sum(comm) from emp where comm is not NULL;
也能实现上述相同效果,但是没有必要进行关于“是否为NULL”的判断
本文介绍了SQL中NULL值参与运算导致结果为NULL的问题,并通过员工信息表举例,展示了如何使用IFNULL函数解决单行处理函数中的空值问题。此外,还提及了分组函数在处理多行数据时自动忽略NULL的特点。
2519

被折叠的 条评论
为什么被折叠?



