[SQL] 035. IF문을 SQL로 구현하기2
Updated:
초보자를 위한 SQL 200제 교재를 토대로 공부한 내용입니다.
오라클 SQL을 기반으로 합니다.
실습에 사용한 테이블은 정보문화사 홈페이지에서 받을 수 있습니다.
[예시]
CASE
를 사용하면 DECODE
보다 더 섬세한 IF문을 구현 가능하다.
CASE WHEN 조건1 THEN 결과1 ... ELSE 결과N END AS 컬럼명
으로 사용한다.
다음은 CASE
를 사용한 여러 예시 코드이다.
-- SAL 구간에 따라 보너스 추가
SELECT ENAME, SAL,
CASE WHEN SAL >= 3000 THEN 500
WHEN SAL >= 2000 THEN 300
WHEN SAL >= 1000 THEN 200
ELSE 0 END AS BONUS
FROM EMP;
-- NULL의 유무에 따라 보너스 추가(CASE,NVL)
SELECT ENAME, COMM,
CASE WHEN COMM IS NULL THEN 500
ELSE 0 END AS BONUS,
NVL2(COMM,0,500) AS BONUS2
FROM EMP;
-- JOB에 따라 보너스 추가
SELECT ENAME, JOB,
CASE WHEN JOB IN ('SALESMAN', 'ANALYST') THEN 500
WHEN JOB = 'CLERK' THEN 400
ELSE 0 END AS BONUS
FROM EMP;
[결과]
ENAME | SAL | BONUS |
---|---|---|
KING | 5000 | 500 |
BLAKE | 2850 | 300 |
CLARK | 2450 | 300 |
JONES | 2975 | 300 |
MARTIN | 1250 | 200 |
ALLEN | 1600 | 200 |
TURNER | 1500 | 200 |
JAMES | 950 | 0 |
WARD | 1250 | 200 |
FORD | 3000 | 500 |
SMITH | 800 | 0 |
SCOTT | 3000 | 500 |
ADAMS | 1100 | 200 |
MILLER | 1300 | 200 |
ENAME | COMM | BONUS | BONUS2 |
---|---|---|---|
KING | 500 | 500 | |
BLAKE | 500 | 500 | |
CLARK | 500 | 500 | |
JONES | 500 | 500 | |
MARTIN | 1400 | 0 | 0 |
ALLEN | 300 | 0 | 0 |
TURNER | 0 | 0 | 0 |
JAMES | 500 | 500 | |
WARD | 500 | 0 | 0 |
FORD | 500 | 500 | |
SMITH | 500 | 500 | |
SCOTT | 500 | 500 | |
ADAMS | 500 | 500 | |
MILLER | 500 | 500 |
ENAME | JOB | BONUS |
---|---|---|
KING | PRESIDENT | 0 |
BLAKE | MANAGER | 0 |
CLARK | MANAGER | 0 |
JONES | MANAGER | 0 |
MARTIN | SALESMAN | 500 |
ALLEN | SALESMAN | 500 |
TURNER | SALESMAN | 500 |
JAMES | CLERK | 400 |
WARD | SALESMAN | 500 |
FORD | ANALYST | 500 |
SMITH | CLERK | 400 |
SCOTT | ANALYST | 500 |
ADAMS | CLERK | 400 |
MILLER | CLERK | 400 |
Leave a comment