1. DECODE 함수
- 특정 열 값이나 데이터 값에 따라 어떤 데이터를 반환할 지 정할 때 사용
- DECODE( [검사 대상이 될 열 또는 데이터, 연산이나 함수의 결과],
[조건1], [데이터가 조건 1과 일치할 때 반환할 결과],
[조건2], [데이터가 조건 2과 일치할 때 반환할 결과],
....
[조건n], [데이터가 조건 n과 일치할 때 반환할 결과],
[위 조건들에 부합하는 경우가 없을 때 반환할 결과] )
- 즉 DECODE( 컬럼, 조건1, 결과1, 조건2, 결과2, ... 조건n, 결과n, 예외 ) 라고 할 수 있다.
EMP 테이블에서
1) 직책이 MANAGER인 사람은 급여의 10% 인상
2) SALESMAN인 사람은 급여의 5% 인상
3) ANALYST인 사람은 그대로
4) 나머지는 3% 만큼 인상
위 조건을 만족하는 SQL문을 작성해보자.
select ename, job, sal,
decode(job, 'MANAGER', sal*1.1, 'SALSESMAN', sal*1.05, 'ANALYST', sal, sal*1.03) as upsal
from emp;
DECODE 함수에서 컬럼(job)과 조건 결과를 차례로 넣었을 때 얻을 수 있는 결과값이 UPSAL에 잘 출력되었다.
2. CASE 문
- 열 값에 따라서 출력이 달라진다.
- CASE [검사 대상이 될 열 또는 데이터, 연산이나 함수의 결과],
WHEN [조건1] THEN [조건1의 결과 값이 TRUE 일때 반환할 결과],
WHEN [조건2] THEN [조건2의 결과 값이 TRUE 일때 반환할 결과],
...
WHEN [조건n] THEN [조건n의 결과 값이 TRUE 일때 반환할 결과],
ELSE [위 조건에 부합하는 경우가 없을 때 반환할 결과]
END
DECODE의 예시 문제를 CASE문을 이용하여 해결해보자.
select ename, job, sal,
case job
when 'MANAGER' then sal*1.1
when'SALSESMAN' then sal*1.05
when 'ANALYST' then sal
else sal*1.03
end as upsal2
from emp;
결과 1과 똑같은 결과 2가 나왔다.
각 조건에 부합하는 급여가 UPSAL2에 잘 출력 된 것을 볼 수 있다.