DataBase/Oracle

[Oracle] 오라클 CASE WHEN 표현식 사용법(if else문)

mingmongs 2025. 5. 31. 09:00

title

오라클에서 if else문과 비슷한 기능을 하는 DECODE 함수를 지난 번에 설명했었다.
하지만 DECODE 함수는 조건이 많아지면 가독성이 떨어지고,
오라클 SQL에서만 사용 가능한 함수라는 점이 단점이다.
DECODE 함수를 대체할 수 있는 기능이 CASE 표현식이며
가독성이 좋고 더 많은 기능을 제공한다.
조건이 복잡한 경우 DECODE 함수 보다 CASE 표현식을 사용할 것을 권장한다.
CASE 표현식에 대해 알아보자.

 

1) CASE 표현식 기본 문법

CASE WHEN 조건1 THEN 처리문1
WHEN 조건2 THEN 처리문2
...
WHEN 조건N THEN 처리문N
ELSE 처리문N+1
END AS "컬럼명"
  • 조건1을 만족 시 출력1
  • 조건2를 만족 시 출력2
    ...
  • 조건N을 만족 시 출력N
  • 모든 조건을 만족하지 않을 시 출력N+1

CASE 표현식의 마지막에는 꼭 END를 붙여야 한다.

 

2) 예시

WITH SCORE_TABLE AS (
SELECT 'SCOOT' AS STUDENT, 90 AS SCORE FROM DUAL
UNION ALL
SELECT 'BLAKE' AS STUDENT, 70 AS SCORE FROM DUAL
UNION ALL
SELECT 'ANDREW' AS STUDENT, 75 AS SCORE FROM DUAL
UNION ALL
SELECT 'ADAM' AS STUDENT, 100 AS SCORE FROM DUAL
UNION ALL
SELECT 'VICTORIA' AS STUDENT, 60 AS SCORE FROM DUAL
UNION ALL
SELECT 'MARY' AS STUDENT, 85 AS SCORE FROM DUAL
UNION ALL
SELECT 'KATE' AS STUDENT, 30 AS SCORE FROM DUAL
)
SELECT STUDENT,
       SCORE,
       CASE WHEN SCORE >= 90 THEN 'A'
       WHEN SCORE >= 80 THEN 'B'
       WHEN SCORE >= 70 THEN 'C'
       ELSE 'F' END AS GRADE
FROM SCORE_TABLE
ORDER BY STUDENT;


위 쿼리의 CASE 조건이 의미하는 것은 아래와 같다.

  • 성적이 90점 이상인 학생은 학점이 A,
  • 성적이 90점 미만 80점 이상인 학생은 학점이 B,
  • 성적이 80점 미만 70점 이상인 학생은 학점이 C,
  • 그 외의 성적을 받은 학생은 학점이 F

 

[reference]
https://m.blog.naver.com/regenesis90/222182250665
https://gent.tistory.com/311