问题
有些列为 NULL,但你不想返回 NULL,而想返回非 NULL 值。
解决方案
使用函数 COALESCE 将 NULL 值替换为实际值。
select coalesce(deptno,0) as deptno
from emp;
扩展
函数 COALESCE 可以将一个或多个值作为参数,并返回参数列表中的第一个非 NULL 值。在上述解决方案中,如果 COMM 不为 NULL,就返回它,否则就返回 0。
处理 NULL 值时,最好利用 DBMS 提供的内置功能。在很多情况下,有多个函数可以很好地完成这项任务,但 COALESCE 在所有 DBMS 中都管用。另外,在所有 DBMS 中,都可以使用 CASE 来完成这项任务。
select case
when deptno is not null then deptno
else 0
end
from emp
虽然可以使用 CASE 将 NULL 值转换为实际值,但使用 COALESCE 更容易且更简洁。
补充
要判断一个值是否为 NULL,必须使用 IS NULL。
select *
from emp
where deptno is null
由于 NULL 与任何值(包括 NULL 本身)都不相等,也不会相等,因此测试列值是否为 NULL 时,不能使用 = 或 !=。要判断列值是否为 NULL,必须使用 IS NULL。也可以使用 IS NOT NULL 来查找给定列不为 NULL 的行。
点个赞吧,这对我非常重要!