[Oracle] 15.DECODE와 CASE
DECODE
DECODE 함수는 프로그램 언어에서 가장 많이 사용되는 switch case 문과 같은 기능을 갖습니다.
즉, 여러 가지 경우에 대해서 선택할 수 있도록 합니다.
다음은 DECODE 함수의 기본형식입니다.
DECODE(표현식, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3, 기본결과)
예를 들어, 부서번호가 20이면 마케팅부, 60이면 IT부, 80이면 판매부, 나머지는 ‘이름모름’이라고 출력하고 싶으면,
다음과 같이 합니다.
SELECT
employee_id,
department_id,
DECODE(department_id,20,'마케팅부',60,'IT부',80,'판매부','이름모름') AS department_name
FROM
employees;
CASE
CASE 함수는 다양한 비교 연산자를 이용하여 조건을 제시할 수 있으므로,
범위를 지정할 수도 있습니다.
CASE 함수는 프로그램 언어의 if else if else와 유사한 구조를 갖습니다.
CASE WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
WHEN 조건3 THEN 결과3
ELSE 결과n
END
SELECT
employee_id,
department_id,
CASE
WHEN department_id = 10 THEN 'Administration'
WHEN department_id = 20 THEN 'Marketing'
WHEN department_id = 30 THEN 'Purchasing'
WHEN department_id = 40 THEN 'Human Resources'
ELSE '부서없음'
END
AS dname
FROM
employees;
-- 직급에 따라 급여를 인상하도록 하자. --
SELECT
employee_id,
first_name,
job_id,
TO_CHAR(
CASE
WHEN job_id LIKE '%MAN' THEN salary * 1.05
WHEN job_id LIKE '%REP' THEN salary * 1.10
WHEN job_id LIKE '%IT_PROG' THEN salary * 1.15
WHEN job_id LIKE '%clerk' THEN salary * 1.20
ELSE salary
END,'L999,999,999') AS salary
FROM
employees;