본문 바로가기
DB/SQL 활용

SQL 활용 - CASE 표현식(SIMPLE CASE EXPRESSION, SEARCHED CASE EXPRESSION)

by 참외롭다 2024. 2. 13.
반응형

 

SQL 활용 - CASE 표현식(SIMPLE CASE EXPRESSION, SEARCHED CASE EXPRESSION)

 

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;
반응형