--空值跟任何数据进行运算结果都是NULL
--NVL(x,y) :如果x为空返回y,否则返回x
如果是比较级运算的话可以不将其转换,因为空值与其比较时本身不成立
emp 员工表(empno 员工编号,ename 员工姓名,job 职位,mgr 上级编号,hiredate 入职日期,sal 工资,comm 奖金,deptno 部门编号)
把SMITH的奖金加上1000
update emp set comm=comm+1000 where ename='smith'
如果使用这个代码,你会发现运行后Smith的奖金并没有增加
涉及到空值的计算时,我们应该使用nvl函数将空值转换为0,再进行计算,否则空值和任何数进行加减乘除得到的结果都为空
update emp set comm=nvl(comm,0)+1000 where ename='SMITH';
此外还需注意一个问题,当我用where寻找SMITH时如果使用得是小写,也发现数据并未更改。
2.把没有奖金的员工的奖金加上1000
update emp set comm=nvl(comm,0)+1000 where nvl(comm,0)=0;
update emp set comm=nvl(comm,0)+1000 where comm is null;
3.把工资小于5000的员工的工资加上500,把工资在5000~8000之间的员工的工资加上300,大于8000的员工的工资不变(要求一条SQL语句)
update emp set sal=(
case
when sal<5000 then sal + 500 -- sal = sal + 500
when sal>=5000 and sal<=8000 then sal + 300 -- sal = sal + 300
else
sal
end
);