计算出所有员工月收入,包括工资和奖金,查询表所有数据得知部分列中有空值,
错误的写法是
SELECT ename,salary,bonus,salary+bonus 总工资
FROM emp_test;
可以看到,有些员工虽然没有奖金BONUS,但是应该还是有基本工资的,上面的写法忽略了空值,空值是无效的,没有意义的,未指定的或不可预知的值,空值不是空格或者0,包含空值的数学表达式的值都为空值,所以有些员工的工资变成了空值,正确的写法应该是
SELECT ename,salary,bonus,salary+nvl(bonus,0) 总工资
FROM emp_test
此时如果没有奖金的员工工资也计算出来了,用的是nvl(m,n)函数,如果m等于空,那么返回n,上面的例子如果员工奖金等于null,那么就返回0,员工的工资加0就不会还是空值了。
总结:
- 空值和任何数据做算数运算,结果都是null;
- 空值和字符串类型做连接操作,结果相当于空值不存在;
- NVL函数可以将空值转换为一个已知的值,可以使用的数据类型有:日期、字符、数字。