[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

Tags:

Categories:

Updated:

Leave a comment