CASE 는 Oracle 에서 DECODE 와 마찬가지로 IF - THEN - ELSE 를 표현할 수 있는 구문
으로, 특정 조건에 맞는 데이터를 추출하거나 조건끼리 비교 처리하여 데이터를 추출하고
싶은 경우에 간편하게 사용할 수 있다.
CASE Syntax
CASE expression
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
WHEN condition_n THEN result_n
ELSE result
END
-- Sample
SELECT EMPNO, ENAME,
CASE WHEN SAL < 1800 THEN 'F 등급'
WHEN SAL >= 1800 AND SAL < 3000 THEN 'E 등급'
WHEN SAL >= 3000 AND SAL < 4500 THEN 'D 등급'
WHEN SAL >= 4500 AND SAL < 6000 THEN 'C 등급'
WHEN SAL >= 6000 AND SAL < 8000 THEN 'B 등급'
WHEN SAL >= 8000 THEN 'A 등급'
END
FROM EMP
CASE : SQL 에서 CASE 구문을 시작할 때 사용한다 (선언).
WHEN : 비교 조건을 기입하는 부분으로, 조건 (condition_1)이 TRUE 이면 THEN 절의 값을 리턴한다 (result_1).
그런데 FALSE 라면 이후의 WHEN 절의 조건 (contition_2~n)에 대해 TRUE 인지 FALSE 인지 비교해 가며 만족하는 값을 추출한다.
ELSE : WHEN 절의 비교가 모두 FALSE 인 경우 ELSE 절의 값을 리턴한다. 만약, ELSE 절이 없으면 NULL 을 리턴한다.
*DECODE 와 CASE 변환.
CASE 1 >CASE 9+1 WHEN 10 THEN '정답' END
로직 : IF 9+1 = 10 THEN
RETURE '정답';
END IF
변환 : DECODE(9+1, 10, '정답')
CASE 2 >CASE 9+1 WHEN 9 THEN '정답 1' WHEN 10 THEN '정답 2' END
로직 : IF 9+1 = 9 THEN
RETURN "정답 1"
ELSIF 9+1= 10 THEN
RETURN "정답 2"
ND IF;
변환 : DECDOE (9+1, 9, "정답 1", 10, "정답 2")
CASE 3 > CASE 9+1 WHEN 9 THEN '정답 1' WHEN 10 THEN '정답 2' ELSE '정답 3' END
로직 : IF 9+1 = 9 THEN
RETURN '정답 1'
ELSE IF 9+1= 10 THEN
RETURN '정답 2'
ELSE
RETURN '정답 3'
END IF;
변환 : DECODE (9+1, 9, '정답 1', 10, '정답