본문 바로가기
Database

[ Oracle] 오라클 CASE() 함수 사용법과 DECODE, IF-ELSE와의 차이점 비교

by 코드개미 2025. 6. 7.

오라클 CASE() 함수 사용법과 DECODE, IF-ELSE와의 차이점 비교
[Oracle] CASE

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
  • 실무 프로젝트 기반 예제 및 활용 경험