1. CASE 함수란?
Oracle의 CASE 함수는 SQL 문 내에서 조건에 따라 서로 다른 결과를 반환할 수 있도록 하는 조건 분기 함수입니다. 다양한 조건 처리와 복잡한 로직을 명확하게 표현할 수 있어 보고서 작성, 데이터 분석, 비즈니스 로직 구현 등 실무에서 매우 유용하게 활용됩니다. CASE 함수는 표준 SQL 문법을 따르며, DECODE 함수보다 더 유연한 분기 처리를 지원합니다.
2. CASE 함수의 문법
CASE 함수에는 두 가지 문법 형식이 있습니다.
2-1. 단순 CASE 표현식
CASE expr
WHEN value1 THEN result1
WHEN value2 THEN result2
[...]
ELSE default_result
END
2-2. 검색 CASE 표현식
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
[...]
ELSE default_result
END
단순 CASE는 하나의 표현식을 여러 값과 비교할 때, 검색 CASE는 복잡한 조건식을 사용할 때 적합합니다.
3. 기본 사용 예제
SELECT EMPLOYEE_ID,
JOB_ID,
CASE JOB_ID
WHEN 'SA_REP' THEN '영업 사원'
WHEN 'IT_PROG' THEN '개발자'
ELSE '기타'
END AS JOB_TITLE
FROM EMPLOYEES;
JOB_ID 값을 기준으로 직원의 직무명을 조건에 따라 매핑합니다.
4. 검색 CASE 예제 (복합 조건)
SELECT EMPLOYEE_ID,
SALARY,
CASE
WHEN SALARY >= 10000 THEN '고소득자'
WHEN SALARY BETWEEN 5000 AND 9999 THEN '중간소득자'
ELSE '저소득자'
END AS INCOME_GROUP
FROM EMPLOYEES;
복잡한 조건식이 필요한 경우 검색 CASE 표현식을 사용하는 것이 훨씬 유리합니다.
5. NULL 처리 예제
SELECT EMPLOYEE_ID,
COMMISSION_PCT,
CASE
WHEN COMMISSION_PCT IS NULL THEN '커미션 없음'
WHEN COMMISSION_PCT > 0 THEN '커미션 있음'
END AS COMM_STATUS
FROM EMPLOYEES;
NULL 값을 명시적으로 처리할 수 있는 것이 CASE 문만의 강점입니다.
6. CASE 함수와 DECODE 함수 비교
항목 | CASE | DECODE |
---|---|---|
표현 방식 | 복잡한 조건, 범위 비교 가능 | 단순 값 비교만 가능 |
NULL 처리 | IS NULL 등 명시적 비교 가능 | NULL 자체 비교는 제한적 |
가독성 | 더 명확하고 유지보수 쉬움 | 간단한 경우는 짧고 빠름 |
표준 여부 | ANSI SQL 표준 | Oracle 전용 |
7. 실무 활용 예제
7-1. 다국어 처리
SELECT USER_ID,
COUNTRY_CODE,
CASE COUNTRY_CODE
WHEN 'KR' THEN '한국어'
WHEN 'US' THEN 'English'
WHEN 'CN' THEN '中文'
ELSE '기타'
END AS DISPLAY_LANGUAGE
FROM USERS;
7-2. HTML 테이블 조건 색상 지정
SELECT ORDER_ID,
ORDER_STATUS,
CASE ORDER_STATUS
WHEN 'PENDING' THEN 'orange'
WHEN 'DELIVERED' THEN 'green'
WHEN 'CANCELLED' THEN 'red'
ELSE 'gray'
END AS STATUS_COLOR
FROM ORDERS;
7-3. 보고서 요약 필드 처리
SELECT DEPT_ID,
COUNT(*) AS TOTAL_EMPLOYEES,
CASE
WHEN COUNT(*) >= 100 THEN '대규모 부서'
WHEN COUNT(*) BETWEEN 30 AND 99 THEN '중간 규모'
ELSE '소규모'
END AS DEPT_SIZE
FROM EMPLOYEES
GROUP BY DEPT_ID;
8. 성능 및 주의사항
- 복잡한 조건이 많은 경우에도 가독성을 해치지 않음
- WHERE 절, SELECT 절, ORDER BY 절 어디든 사용 가능
- CASE문이 너무 길어질 경우 가급적 VIEW 또는 CTE로 분리 추천
- IN, BETWEEN, IS NULL, LIKE 등 다양한 연산자와 함께 사용 가능
9. 결론
CASE 함수는 Oracle SQL에서 가장 강력하고 유연한 조건 분기 수단 중 하나입니다. DECODE보다 더 다양한 조건을 지원하며, 특히 범위 기반 분기, NULL 처리, 복잡한 조건을 가독성 있게 처리할 수 있는 것이 큰 장점입니다. 실무에서는 보고서 생성, UI 표시 조건 처리, 데이터 분석 등에서 반드시 숙지해야 할 필수 SQL 함수입니다.
출처
- Oracle 공식 문서: https://docs.oracle.com/en/
- Oracle SQL Language Reference: CASE Expressions
- 실무 프로젝트 기반 예제 및 활용 경험
'Database' 카테고리의 다른 글
[ Oracle] 오라클 USERENV() 함수로 접속 정보와 세션 상태 추적하기 (0) | 2025.06.07 |
---|---|
[ Oracle] 오라클 SYS_CONTEXT() 함수로 사용자, 세션, IP 정보 확인하는 방법 (0) | 2025.06.07 |
[ Oracle] 오라클 DECODE() 함수로 IF-ELSE 로직을 SQL에서 구현하는 방법 (0) | 2025.06.07 |
[ Oracle] 오라클 COALESCE() 함수로 복잡한 CASE 문 없이 NULL 처리하기 (0) | 2025.06.07 |
[ Oracle] 오라클 NULLIF() 함수 완전 정복: 두 값 비교로 NULL 반환하는 방식 (0) | 2025.06.07 |