자바 웹 개발자가 될거야/DB

[Oracle] CASE, DECODE 조건부 표현식

whitz 2022. 2. 8. 15:03

< 조건부 표현식 >

 

- 프로그래밍 언어으로 작업할 때 사용한 IF THEN ELSE 구문 논리를 디비에서도 적용할 수 있는 방법

 

 

① CASE 식

 

- IF-THEN-ELSE 문 작업을 수행하여 조건부 조회를 편리하게 수행하도록 함

- CASE로 시작해서 END로 끝나야함

- 동등연산자 (=) 를 내포하고 있음

 

CASE 비교할값(컬럼명) WHEN 조건1 THEN 실행문1
                     WHEN 조건2 THEN 실행문2
                     ...
ELSE 실행문
END [alias 가능]

 

- 예제) job_id가 'IT_PROG'면 급여가 10% 상승 'ST_CLECK'이면 15% 상승 'SA_REP'면 20%가 상승 그 외에는 상승하지 않았다.

 

더보기
SELECT last_name, job_id, salary,
    CASE job_id WHEN 'IT_PROG' THEN 1.10*salary
                WHEN 'ST_CLERK' THEN 1.15*salary
                WHEN 'SA_REP' THEN 1.2*salary
                ELSE salary
    END "REVISED_SALARY"
FROM employees;

 

 

② (검색된) CASE 표현식

 

- 위에서 설명한 CASE식과 조금 다름

- CASE로 시작해서 END로 끝남

- 비교할 값(컬럼명)을 포함하지 않음

- 내포하고 있는 비교연산자가 없어서 조건문을 적을 때 적어야함

 

CASE WHEN 조건문1 THEN 실행문1
     WHEN 조건문2 THEN 실행문2
     ...
     ELSE 기본 실행문
END

 

- 예제 ) 급여가 5000미만이면 'Low' , 10000미만이면 'Medium' , 20000미만이면 'Good' , 나머지는 'Excellent' 로 출력하시오

 

더보기
SELECT last_name, salary,
(CASE WHEN salary<5000 THEN 'Low'
        WHEN salary<10000 THEN 'Medium'
        WHEN salary<20000 THEN 'Good'
        ELSE 'Excellent'
END) qualified_salary
FROM employees;

 

③ DECODE 함수

 

- CASE식 또는 IF-THEN-ELSE문의 작업을 수행하여 조건부 조회를 편리하게 수행

- 인수가 필요함

- 동등연산자(=) 내포되어 있음

 

DECODE (컬럼명|비교할 값, 값1, 실행값1
                        [,값2, 실행값2]
                        ...
                        [,디폴트값])

 

- 예제) job_id가 'IT_PROG'면 급여가 10% 상승 'ST_CLECK'이면 15% 상승 'SA_REP'면 20%가 상승 그 외에는 상승하지 않았다.

 

더보기
SELECT last_name, job_id, salary,
        DECODE(job_id, 'IT_PROG', 1.10*salary,
                'ST_CLERK', 1.15*salary,
                'SA_REP', 1.20*salary,
                salary)
REVISED_SALARY
FROM employees;

 

- 예제) 부서 80의 각 사원에 대해 적용 가능한 세율을 1의 자리까지만 표시해라

 

더보기
SELECT last_name, salary,
        DECODE (TRUNC (salary/2000,0),
                            0, 0.00,
                            1, 0.09,
                            2, 0.20,
                            3, 0.30,
                            4, 0.40,
                            5, 0.42,
                            6, 0.44,
                            0.45) TAX_RATE
FROM employees
WHERE department_id = 80;