조건부 표현식에는 CASE 표현식이 있으며, Oracle에는 이와 비슷한 DECODE 표현식이 하나 더 있다.
- CASE 조건문은 Short-Circuit Evalution으로 조건이 참인 이후의 조건은 따지지 않는다.
- 반환값들은 같은 데이터 타입이어야 한다.
CASE 조건문
--[SIMPLE_CASE_EXPRESSION SQL문]
SELECT last_name, salary, job_id,
CASE job_id WHEN 'IT_PROG' THEN 1.10 * salary --조건 만족하면 끝(Shor-Circuit Evaluation
WHEN 'ST_CRERK' THEN 1.15 * salary
WHEN 'SA_REP' THEN 1.20 * salary
ELSE salary -- ELSE 없으면 NULL값 출력
END "Revised Salary" -- 별칭부여
FROM employees;
--[SEARCHED_CASE_EXPRESSION SQL문]
SELECT last_name, salary, job_id,
CASE WHEN job_id = 'IT_PROG' THEN 1.10 * salary
WHEN job_id = 'ST_CRERK' THEN 1.10 * salary
WHEN job_id = 'SA_REP' THEN 1.10 * salary
ELSE salary
END "Revised Salary"
FROM employees;
---비동등 조건도 가능
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 조건문 (오라클 전용)
- NULL 값은 원래 비교가 안되지만 DECODE 조건문은 NULL 값과 동등 비교도 허용한다.
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;
SELECT last_name, job_id, salary
, DECODE(commission_pct, NULL, '노 커미션'
, 0.1, '10% 커미션'
, 0.2, '20% 커미션'
, '기타 커미션') AS
커미션
FROM employees;
DECODE 함수로 내 마음대로 정렬하기
-------------------CASE------------------------------
SELECT *
FROM local_sales
ORDER BY CASE city WHEN '서울' THEN 10
WHEN '부산' THEN 20
WHEN '대구' THEN 30
WHEN '대전' THEN 40
WHEN '인천' THEN 50
END;
-------------------DECODE-------------------------------
SELECT *
FROM local_sales
ORDER BY DECODE(city, '서울', 10
, '부산', 20
, '대구', 30
, '대전', 40
, '인천', 50);
728x90
'SQL' 카테고리의 다른 글
[SQL] 서브쿼리의 결과값이 NULL이 될 경우 (0) | 2024.09.30 |
---|---|
[SQL] 외부 조인 주의해야할 점 (0) | 2024.09.30 |
[SQL] SQL의 NULL (1) | 2024.09.26 |
[Oracle] 날짜 포맷 형식 (0) | 2024.09.26 |
[SQL] 연산자 우선 순위 (0) | 2024.09.26 |