오늘은 오라클에서 자주 사용하는 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을 공부하거나 실무에서 사용하고 있다면 이 글이 참고가 되었으면 좋겠다. 감사합니다. (_ _)
'오라클[ORACLE]' 카테고리의 다른 글
| [오라클] LIKE 문법 완벽 정리 (%, _) (0) | 2025.12.23 |
|---|---|
| [오라클] NULL 처리 정리 (NVL, NVL2, COALESCE, NULLIF) (0) | 2025.12.22 |
| [오라클] SELECT / INSERT / UPDATE / DELETE SQL 기본 문법 정리 (DML) (0) | 2025.12.16 |
| [오라클] TO_DATE 날짜 연산 정리 (0) | 2025.12.15 |
| [오라클] TO_CHAR와 TO_DATE 함수 정리 (0) | 2025.03.09 |