Oracle/SQL Fundamentals I
7일차 # 3-54: Conditional Expressions
Bohemian life
2012. 4. 12. 22:21
- short-circuit evaluation
* CASE expression: ANSI SQL - simple, searched
* DECODE function: Oracle proprietary
문제) 부서 번호에 따라 월급을 차등 인상한다면 어떻게 할 것인가?
1) decode 함수 사용
select deptno, sal
, decode(deptno, 10, sal*1.10
, 20, sal*1.15
, 30, sal*1.05
, sal) as inc_sal
from emp;
2) simple CASE expression
select deptno, sal
, case deptno when 10 then sal*1.10
when 20 then sal*1.15
when 30 then sal*1.05
else sal
end as inc_sal
from emp;
3) searched CASE expression
select deptno, sal
, case when deptno = 10 then sal*1.10
when deptno = 20 then sal*1.15
when deptno = 30 then sal*1.05
else sal
end as inc_sal
from emp;
문제) 월급이 2000 미만이면 Low,
2000 이상 4000 미만이면 Mid,
4000 이상이면 High가 표현되도록 Select 문장을 작성하세요.
1) decode
select ename, sal
, decode(trunc(sal/2000), 0, 'Low'
, 1, 'Mid'
, 'High') as sal_grade
from emp;
2) simple case
select ename, sal
, case trunc(sal/1000) when 0 then 'Low'
when 1 then 'Low'
when 2 then 'Mid'
when 3 then 'Mid'
else 'High'
end as sal_grade
from emp;
↓ ↓ ↓
select ename, sal
, case trunc(sal/2000) when 0 then 'Low'
when 1 then 'Mid'
else 'High'
end as sal_grade
from emp;
3) searched case
select ename, sal
, case when sal < 2000 then 'Low'
when sal < 4000 then 'Mid'
else 'High'
end as sal_grade
from emp;