반응형

CASE 표현식은 PL/SQL의 IF-THEN-ELSE, ORACLE의 DECODE 함수와 유사한 로직을 수행하는 표현식입니다. SQL의 비교 연산 기능을 보완하는 역할을 합니다.
-- PL/SQL
IF SAL > 2000
THEN REVISED_SALARY = SAL
ELSE REVISED_SALARY = 2000
END IF
--CASE 표현
SELECT ENAME,
CASE
WHEN SAL > 2000 THEN SAL
ELSE 2000
END AS REVISED_SALARY
FROM EMP;
CASE EXPRESSION 은 SIMPLE CASE EXPRESSION 과 SEARCHED CASE EXPRESSION 중 하나를 사용합니다.
CASE
SIMPLE_CASE_EXPRESSION 조건 or SEARCHED_CASE_EXPRESSION 조건
[ELSE 디폴트값]
END
SIMPLE CASE EXPRESSION의 경우 CASE 다음에 사용되는 칼럼 또는 표현식이 위치합니다. WHEN 절 뒤의 값과 컬럼 또는 표현식이 일치하면 THEN 절 뒤의 값을 적용합니다.
-- 부서 정보에서 부서 위치를 미국의 동부, 중부, 서부로 구분하라.
SELECT LOC
, CASE LOC
WHEN 'NEW YORK' THEN 'EAST'
WHEN 'BOSTON' THEN 'EAST'
WHEN 'CHICAGO' THEN 'CNETER'
WHEN 'DALLAS' THEN 'CNETER'
ELSE 'ETC'
END as AREA
FROM DEPT;
SEARCHED CASE EXPRESSION 의 경우 CASE 다음에는 컬럼이나 표현식을 표시하지 않고, WHEN 절에 조건절을 표시합니다. 조건절이 참인 경우 THEN 뒤에 위치한 값을 적용합니다. SIMPLE CASE EXPRESSION에 비해 훨씬 다양한 조건을 적용할 수 있습니다.
CASE
WHEN CONDITION THEN RETURN_EXPR
ELSE DEFAULT_EXPR
END
-- 사원 정보에서 급여가 3000 이상이면 상등급, 1000 이상이면 중등급, 1000 미만이면 하등급으로 분류하라
SELECT ENAME
, CASE
WHEN SAL >= 3000 THEN 'HIGH'
WHEN SAL >= 1000 THEN 'MID'
ELSE 'LOW'
END AS SALARY_GRADE
FROM EMP;
-- CASE 표현은 함수의 성질을 갖고 있으므로 중첩 함수로 사용할 수도 있다.
-- 사원 정보에서 급여가 2000 이상이면 보너스를 1000으로, 1000 이상이면 500 을 1000 미만이면 으로 계산한다.
SELECT ENAME, SAL
, CASE
WHEN SAL >= 2000 THEN 1000
ELSE(
CASE
SAL >= 1000 THEN 500
ELSE 0
END )
END AS BONUS
FROM EMP;
반응형