条件表达式

例子:老板打算给员工涨工资, 要求:

​ 总裁(PRESIDENT)涨1000,经理(MANAGER)涨800,其他人涨400. 请将涨前,涨后的薪水列出。

select ename, job, sal 涨前薪水, 涨后薪水 from emp 涨后的薪水是根据job来判断的

思路: if 是总裁(‘PRESIDENT’) then +1000

​ else if 是经理(‘MANAGER’) then +800

​ else +400

但是在SQL中无法实现if else 逻辑。当有这种需求的时候,可以使用case 或者 decode

case: 是一个表达式,其语法为:

1
2
3
4
5
CASE expr  WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END

案例: 老板打算给涨工资,总裁1000,经理800,普通员工400,将涨前、涨后薪水列出

介绍case when 的用法和decode的用法:

使用case when

1
2
3
4
5
6
7
8
9
10
11
12
13
select empno,
ename,
job,
sal "涨前薪水",
case job
when 'PRESIDENT' then
sal + 1000
when 'MANAGER' then
sal + 800
else
sal + 400
end "涨后薪水"
from emp;

使用decode函数:

1
2
3
4
5
6
7
8
9
10
11
select empno,
ename,
job,
sal "涨前薪水",
decode(job,
'PRESIDENT',
sal + 1000,
'MANAGER',
sal + 800,
sal + 400) "涨后薪水"
from emp;

代码优化

image-20220512011329665