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 |