본문 바로가기
오라클[ORACLE]

[오라클] CASE WHEN 문법 완벽 정리 ( 다중 CASE WHEN 정리 )

by devlog93 2025. 12. 24.

오늘은 오라클에서 자주 사용하는 CASE WHEN에 대해 정리해 보려 합니다. CASE WHEN은 SQL에서 조건에 따라 결과를 분기 처리하는 조건문입니다. JAVA의 if/ else if/ else 구조와 동일한 역할을 합니다.

  • 조회 결과를 조건에 따라 가공
  • 컬럼 값을 상황에 맞게 변환
  • 정렬 순서 제어 가능

1. CASE WHEN 이란?

◆ 기본 구조

SELECT CASE WHEN 조건1 THEN 결과1
            WHEN 조건2 THEN 결과2
            ELSE 결과3
       END AS TEST
  FROM EMP;
  • 위에서 아래로 조건을 순차적으로 검사
  • 처음 TRUE가 되는 조건의 결과를 반환한다.
  • 모든 조건이 FALSE 면 ELSE
  • ELSE 생략 시 결과는 NULL

2. CASE WHEN 기본 예제

점수에 따른 학점 처리

SELECT NAME
     , SCORE
     , CASE WHEN SCORE >= 90 THEN 'A'
            WHEN SCORE >= 80 THEN 'B'
            WHEN SCORE >= 70 THEN 'C'
            ELSE 'F'
        END AS GRADE
  FROM STUDENT;

조건 순서가 중요하다. 가장 넓은 조건을 아래에 배치하자.

3. CASE WHEN + NULL 처리

◆ 잘못된 예

WHEN PHONE = NULL THEN '번호 없음';

◆ 올바른 예

WHEN PHONE IS NULL THEN '번호 없음';

 

※ CASE WHEN 예제

SELECT NAME
     , CASE WHEN PHONE IS NULL THEN '번호 없음'
            ELSE PHONE
        END AS PHONE_INFO
 FROM USER;

 

4. 다중 CASE WHEN ( 중첩 CASE WHEN )

◆ CASE WHEN 안에 또 다른 CASE WHEN을 사용하는 구조

  • 조건이 복잡하거나
  • 1차 분기 ㅡ> 2차 분기가 필요할 때 사용
CASE WHEN 조건1 THEN
     CASE WHEN 조건1-1 THEN 결과1
          WHEN 조건1-2 THEN 결과2
          ELSE 결과3
      END
     WHEN 조건2 THEN 결과4
     ELSE 결과5
 END

 

※ 다중 CASE WHEN 실무 예제 ( 회원 상태 )

♣조건 

  • 탈퇴 회원
  • 관리자 / 일반 회원
  • 로그인 가능 여부
SELECT USER_ID
     , CASE WHEN DEL_YN = 'Y' THEN '탈퇴회원'
            ELSE
            CASE WHEN ROLE = 'ADMIN' THEN '관리자'
                 WHEN LOGIN_YN = 'N' THEN '로그인 불가'
                 ELSE '일반회원'
             END
        END AS USER_STATUS
  FROM USER_INFO;

☞ 1차 조건: 탈퇴 여부

☞ 2차 조건: 권한 / 상태

 

※ 다중 CASE WHEN 실무 예제 ( 게시판 상태 )

SELECT TITLE
     , CASE WHEN DEL_YN = 'Y' THEN '삭제됨'
            ELSE
            CASE WHEN NOTICE_YN = 'Y' THEN '공지'
                 WHEN FIX_YN = 'Y' THEN '상단고정'
                 ELSE '일반'
             END
        END AS POST_TYPE
  FROM BOARD;

 

마무리

CASE WHEN은 오라클 SQL에서 조건 분기를 처리할 때 많이 사용되는 문법이다. 단순한 값 변환부터, 조회 결과 가공, 상태 값 변경 등 실무에서 자주 사용하는 것 같다. 특히 이번에 살펴본 것처럼

  • 기본 CASE WHEN
  • 조건이 복잡할 때 사용하는 다중 CASE WHEN ( 중첩 CASE WHEN)

이 두 가지만 이해해두면 게시판 상태 처리, 사용자 권한 분기, 점수, 등급 등 대부분의 조건 로직을 SQL 단계에서 깔끔하게 해결할 수 있다.
다만, 다중 CASE WHEN은 편리한 만큼 중첩이 깊어질수록 가독성이 급격히 떨어질 수 있으므로 주의하자.

오라클 SQL을 공부하거나 실무에서 사용하고 있다면 이 글이 참고가 되었으면 좋겠다. 감사합니다. (_ _)