[Oracle] 오라클 CASE WHEN 표현식 사용법

오라클에서 if 문과 비슷한 기능을 하는 DECODE 함수가 있다. 그러나 DECODE 함수는 조건이 많아지면 가독성이 떨어지고 복잡해지며, 가장 큰 문제는 오라클 SQL에서만 사용할 수 있는 비표준 함수이다.

 

오라클에서 DECODE 함수를 대체할 수 있는 기능이 CASE 표현식이며 가독성이 좋고 더 많은 기능을 제공한다. 조건이 복잡한 경우 DECODE 함수 보다 CASE 표현식을 사용할 것을 권장한다.

 

오라클 CASE 표현식

If 문 방식

SELECT ename
     , deptno
     , CASE WHEN deptno = '10' THEN 'New York'
            WHEN deptno = '20' THEN 'Dallas'
            ELSE 'Unknown'
       END AS loc_name
  FROM emp
 WHERE job = 'MANAGER'

 

CASE 표현식에서 ELSE 부분은 생략이 가능하며, 만족하는 조건이 없으면 NULL을 리턴한다. CASE 표현식은 SELECT 절, WHERE 절, PL/SQL 등 많은 부분에서 사용이 가능하다.

 

Switch 문 방식

SELECT ename
     , deptno
     , CASE deptno 
            WHEN 10 THEN 'New York'
            WHEN 20 THEN 'Dallas'
            ELSE 'Unknown'
       END AS loc_name
  FROM scott.emp
 WHERE job = 'MANAGER'

 

CASE 표현식은 C, JAVA의 Swith문과 비슷한 방식으로 사용이 가능하다. CASE 뒤에 비교할 컬럼을 입력하고 WHEN 뒤에 값을 입력해 놓으면 된다. 단순 값만 비교할 때는 조금 더 쿼리문을 단순하게 표현할 수 있다.

 

사용_예제_쿼리.txt
0.02MB

 

사용 예제

예제 1 - 일반적인 CASE 표현식

 

 

예제 2 - ELSE를 생략 후 만족하는 조건이 없으면 NULL 리턴

 

 

예제 3 - 비교 연산자, 범위 연사자 등 사용이 가능

 

 

예제 4 - WHERE 절에 사용 가능

 

 

예제 5 - 오라클 내장 함수를 조건으로 사용 가능

 

 

예제 6 - 사용자 정의 함수를 조건으로 사용 가능

 

 

예제 7 - THEN 절에서 중첩 CASE 등 추가 연산 작업 가능

 

 

 

[Oracle] CASE WHEN 조건 여러개 (다중 조건, 다중 칼럼)

오라클 쿼리문에서 CASE WHEN 표현식의 조건을 여러개 부여하기 위해서는 WHEN~THEN을 반복해서 사용할 수 있으며, 다중 조건을 부여할 수 있다. 하나의 조건절(WHEN~THEN)에서 여러개 칼럼을 조건으로

gent.tistory.com

 

[Oracle] CASE WHEN 서브쿼리 사용법 (내부 SELECT)

오라클 쿼리문에서 CASE 표현식을 사용할 때 조건절에 서브쿼리(Subquery)를 사용하여 조건을 부여할 수 있다. CASE WHEN 안에서 SELECT 문을 사용할 수 있으며, 조건절에서 서브쿼리를 사용할 때는 EXISTS

gent.tistory.com

 

[Oracle] 오라클 DECODE 함수 사용방법 (if else, 디코드)

DECODE 함수는 오라클 쿼리에서 가장 많이 사용하는 함수 중 하나이다. 표준 SQL 함수가 아니라서 사용을 꺼려하기도 하지만 잘 사용하면 아주 편하기 때문에 유용하다. 최근에는 CASE WHEN 구문 사용

gent.tistory.com

 

댓글

Designed by JB FACTORY