[Oracle] 오라클 CASE WHEN 문 사용법, CASE WHEN 다중 조건, 중첩문
CASE WHEN문
C언어나 JAVA등에서 조건식을 사용하기 위해서는 if문을 주로 사용한다.
오라클도 이와 유사하게 조건식을 사용할 수 있는 방법이 있다.
바로 CASE WHEN문이다.
CASE WHEN [조건 1] THEN [출력 1]
WHEN [조건 2] THEN [출력 2]
...
ELSE [출력 N]
END
CASE WHEN문의 기본적인 문법은 위와 같다.
프로그래밍 언어에서 사용하는 if문과 거의 비슷하다.
CASE WHEN 뒤에 조건을 작성하고, 해당 조건을 만족하면 THEN 뒤의 출력값을 출력하는 식이다.
예를 들어
SELECT CASE WHEN gender = 'M' THEN '남성'
WHEN gender = 'F' THEN '여성'
END AS '성별'
FROM dual;
위와 같이 사용할 수 있다(ELSE 문은 생략 가능하다)
하지만 위와 같이 간단한 조건문은 DECODE 함수를 사용하는 게 나을 수도 있다.
SELECT DECODE(gender, 'M', '남성', '여성') AS '성별'
FROM dual;
DECODE 함수를 사용하면 위와 같이 간단하게 나타낼 수 있다.
CASE WHEN문은 DECODE 함수를 대체할 수 있으며 조건이 많은 경우에는 CASE WHEN 문을 사용하게 가독성 측면에서 나은 선택일 수 있다.
CASE 문을 이용한 switch 방식
switch(grade){
case 'A':
msg = '훌륭한 성적';
case 'B':
msg = '준수한 성적';
case 'C':
msg = '발전가능한 성적';
case 'F':
msg = '노력이 필요한 성적';
}
JAVA 같은 언어에서 switch 문을 활용하면 위와 같은 방식으로 가독성 좋게 조건문을 작성할 수 있다.
오라클의 CASE WHEN 문도 위와 같은 방식을 지원한다.
SELECT CASE grade
WHEN 'A' THEN '훌륭한 성적'
WHEN 'B' THEN '준수한 성적'
WHEN 'C' THEN '발전가능한 성적'
WHEN 'F' THEN '노력이 필요한 성적'
END AS msg
FROM dual;
위와 같이 CASE와 WHEN 사이에 조건을 판단할 칼럼을 적으면 된다.
CASE WHEN 다중조건
SELECT CASE WHEN gender = 'M' AND age >= 20 THEN '20대 이상의 남자'
WHEN gender = 'F' AND age >= 20 THEN '20대 이상의 여자'
END AS '쓸모없는 정보'
FROM dual;
CASE WHEN 문에는 AND나 OR을 사용해 다중조건을 걸 수 있다.
AND의 경우에는 모든 조건을 만족해야 THEN 뒤의 출력 값을 출력하고
OR의 경우에는 하나만 만족해도 된다.
CASE WHEN 중첩
SELECT CASE WHEN gender = 'M' THEN
CASE WHEN grade = 'A' THEN '공부잘하는 남자'
WHEN grade = 'F' THEN '공부못하는 남자'
END
WHEN gender = 'F' THEN
CASE WHEN grade = 'A' THEN '공부잘하는 여자'
WHEN grade = 'F' THEN '공부못하는 여자'
END
END AS '평가'
FROM dual;
CASE WHEN 문은 위와 같이 중첩이 가능하다.
THEN 뒤에 또 다른 CASE WHEN 문을 중첩하는 식이다.
다만 너무 많은 중첩은 가독성을 떨어트릴 수 있으니 지양하는게 좋다.