DBMS/개념

23_ CASE문

seungwon-1 2025. 10. 24. 13:31

1. CASE문의 개요

CASE문은 SQL에서 조건부 처리(Conditional Logic)를 수행할 때 사용하는 핵심 문법이다.
여러 조건을 순차적으로 검사하고, 해당 조건이 참이면 그에 맞는 결과를 반환한다.
복잡한 조건문을 간결하게 표현할 수 있어 가독성과 유지보수성이 높다는 장점이 있다.

 

2. CASE문의 기본 구조

 
CASE
    WHEN 조건1 THEN 결과1
    WHEN 조건2 THEN 결과2
    WHEN 조건3 THEN 결과3
    ...
    ELSE 기본_결과
END;

위와 같은 형태로 여러 조건을 순차적으로 검사한다.
WHEN 절은 위에서부터 평가되며, 처음으로 참이 되는 조건의 결과만 반환한다.
어떤 조건도 만족하지 않으면 ELSE의 기본 결과가 반환된다.

 

3. CASE문의 두 가지 형식

CASE문에는 두 가지 대표적인 형태가 있다.

(1) 단순 CASE문 (Simple CASE)

특정 표현식(expression)이나 열(column)의 값을 직접 비교할 때 사용한다.

CASE expression
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ELSE default_result
END

예를 들어, 포지션 코드에 따라 직업명을 출력할 때 다음과 같이 사용할 수 있다.

 

SELECT 
    PLAYER_NAME,
    CASE POSITION
        WHEN 'FW' THEN '포워드'
        WHEN 'MF' THEN '미드필더'
        WHEN 'DF' THEN '수비수'
        WHEN 'GK' THEN '골키퍼'
        ELSE '미정'
    END AS 포지션
FROM PLAYER;

 

 

(2) 검색된 CASE문 (Searched CASE)

각 WHEN절에 독립적인 조건식을 사용할 때 적합하다.

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ELSE result
END

예를 들어 가격 범위에 따라 상품을 분류하는 경우:

SELECT 
    product_name,
    price,
    CASE 
        WHEN price < 50 THEN '저가'
        WHEN price BETWEEN 50 AND 100 THEN '중가'
        ELSE '고가'
    END AS price_category
FROM products;

 

4. CASE문의 활용 위치

CASE문은 SELECT, WHERE, ORDER BY 등 SQL의 여러 절에서 사용할 수 있다.

(1) SELECT 절에서의 활용

조건에 따라 출력되는 값을 다르게 하고 싶을 때 사용한다.

SELECT 
    employee_name,
    salary,
    CASE
        WHEN salary < 3000 THEN '낮음'
        WHEN salary BETWEEN 3000 AND 5000 THEN '중간'
        WHEN salary > 5000 THEN '높음'
        ELSE '미분류'
    END AS salary_level
FROM employees;

이처럼 CASE문을 SELECT절에 넣으면, 조건별 분류값을 컬럼처럼 출력할 수 있다.

 

(2) WHERE 절에서의 활용

WHERE절에서도 CASE문을 사용할 수 있지만, 일반적으로는 권장되지 않는다.
그래도 복잡한 조건을 하나의 문장으로 표현해야 할 때는 다음과 같이 쓸 수 있다.

SELECT *
FROM employees
WHERE
    CASE 
        WHEN department = 'Sales' THEN salary > 4000
        WHEN department = 'IT' THEN years_of_experience > 5
        WHEN department = 'HR' THEN hire_date < TO_DATE('2020-01-01', 'YYYY-MM-DD')
        ELSE FALSE
    END;

부서별로 다른 조건을 적용해야 할 때 이런 식으로 사용하면 한 쿼리 안에 모든 조건을 표현할 수 있다.

 

5. CASE문의 장점

  • 복잡한 조건 로직을 한눈에 보기 쉽게 표현할 수 있다.
  • 데이터 분류, 변환, 가공을 SQL 내부에서 직접 수행할 수 있다.
  • IF문보다 간결하고 가독성이 높다.

 

6. 주의사항

  • CASE문은 조건이 많을수록 쿼리 성능이 저하될 수 있음
  • 너무 복잡하게 중첩된 CASE문은 오히려 가독성을 해칠 수 있음
  • 간단한 로직이라면 별도의 컬럼 계산이나 JOIN으로 처리하는 것이 더 효율적일 때도 있다.

'DBMS > 개념' 카테고리의 다른 글

25_ 정규표현식(Regular Expression)  (0) 2025.10.28
24_ DBMS 심화 주제  (0) 2025.10.26
22_ CTE (Common Table Expressions)  (0) 2025.10.22
21_ 집합 연산자  (0) 2025.10.20
20_ 서브쿼리  (0) 2025.10.18