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