기준이 되는 데이터를 먼저 지정한 후 해당 데이터 값에 따라 다른 결과 값을 내보내는 함수
자바의 if 조건문 또는 switch-case 조건문과 비슷한다.
기본 형식
DECODE(
[검사 대상이 될 열 또는 데이터, 연산이나 함수의 결과],
[조건1], [데이터가 조건1과 일치할 때 반환할 결과],
[조건2], [데이터가 조건2와 일치할 때 반환할 결과],
...
[조건N], [데이터가 조건n과 일치할 때 반환할 결과],
[위 조건1~조건n과 일치할 경우가 없을 때 반환할 결과]
)
-- [실습 1-1] DECODE 함수를 사용하여 출력하기
Select ename, sal, comm,
decode(job,
'MANAGER', sal*1.1,
'SALESMAN', sal*1.05,
'ANALYST', sal,
sal*1.03) as upsal
From emp;
CASE문은 각 조건에 사용하는 데이터가 서로 상관없어도 된다.
기본 형식
CASE []
WHEN [조건1] THEN [조건1의 결과 값이 true일 때, 반환할 결과]
WHEN [조건2] THEN [조건1의 결과 값이 true일 때, 반환할 결과]
...
WHEN [조건n] THEN [조건n의 결과 값이 true일 때, 반환할 결과]
ELSE [위 조건1~조건n과 일치하는 경우가 없을 때 반환할 결과]
END
-- [실습 2-1] CASE문을 사용하여 출력하기
Select empno, ename, job, sal,
case job
when 'MANAGER' then sal*1.1
when 'SALESMAN' then sal*1.05
when 'ANALYST' then sal
else sal*1.03
end as upsal
From emp;
-- [개념 2-2] 기준 데이터 없이 조건식만으로 CASE문 사용하기
-- [실습 2-2] 열 값에 따라서 출력 값이 달라지는 CASE문
Select empno, ename, comm,
case
when comm is null then '해당사항 없음'
when comm = 0 then '수당 없음'
when comm > 0 then '수당 : ' || comm
end as comm_text
From emp;