자바 웹 개발자가 될거야/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;