SQL 在运算和比较中使用Null,Null 不会等于或不等于任何值,甚至不能与其自身进行比较,但是你希望对从 Null 列返回的数据进行评估,就像评估具体的值一样。例如,你想找出 EMP 表里业务提成(COMM 列)比员工 WARD 低的所有员工。检索结果应该包含业务提成为 Null 的员工。
SQL 在运算和比较中使用Null 问题描述
Null 不会等于或不等于任何值,甚至不能与其自身进行比较,但是你希望对从 Null 列返回的数据进行评估,就像评估具体的值一样。例如,你想找出 EMP 表里业务提成(COMM 列)比员工 WARD 低的所有员工。检索结果应该包含业务提成为 Null 的员工。
SQL 在运算和比较中使用Null 解决方案
使用如 COALESCE 这样的函数把 Null 转换为一个具体的、可以用于标准评估的值。
1 select ename,comm
2 from emp
3 where coalesce(comm,0) < ( select comm
4 from emp
5 where ename = 'WARD' )
SQL 在运算和比较中使用Null 扩展知识
COALESCE 函数会返回参数列表里的第一个非 Null 值。就本实例而言,COMM 列中的 Null 会被替换为 0,这样才能与 WARD 的业务提成相比较。把 COALESCE 函数添加到 SELECT 列表,就能查看其执行结果。
select ename,comm,coalesce(comm,0)
from emp
where coalesce(comm,0) < ( select comm
from emp
where ename = 'WARD' )
ENAME COMM COALESCE(COMM,0)
---------- ---------- ----------------
SMITH 0
ALLEN 300 300
JONES 0
BLAKE 0
CLARK 0
SCOTT 0
KING 0
TURNER 0 0
ADAMS 0
JAMES 0
FORD 0
MILLER 0
极客教程