[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