[Oracle] 오라클 DECODE 사용 방법

2022. 8. 9. 20:09데이터베이스/Oracle

728x90

안녕하세요. 오늘은 오라클에서 사용하는 DECODE에 대해 알아보겠습니다.

 

DECODE는 다른 프로그래밍 언어에서 많이 쓰이는 if, else if, else문과 비슷한 기능을 하는데요.

 

형태는 이와 같습니다.

 

DECODE(기준 컬럼, '조건1', '결과1', '조건2', '결과2', '결과3')

 

소괄호 안에 먼저 기준이 되는 컬럼이 들어가고

 

쉼표(,) 뒤에 조건

 

쉼표(,) 뒤에 결과가 들어갑니다.

 

조건의 갯수 제한은 없으며 조건과 결과를 하나씩 짝을 이뤄 넣다

 

짝이 없는 경우 else문처럼 앞의 조건에 해당하지 않으면 리턴할 값을 설정할 수도 있습니다.

 

아래의 경우를 풀이하면

 

만약 COLOR 컬럼이 'red' 라면 '빨강' 을 리턴하고

그렇지 않고 COLOR 컬럼이 'blue' 라면 '파랑'을 리턴하고

모두 아니라면 '기타' 를 리턴하는 게 되겠죠?

 

 

이해를 돕기 위해 아래 예시 테이블을 보겠습니다.

 


 

먼저 COLOR 컬럼을 갖고 있는 임시테이블을 만들겠습니다.

1
2
3
4
5
6
  WITH temp AS (
    SELECT 'red' COLOR FROM dual UNION ALL
    SELECT 'blue' COLOR FROM dual
)
SELECT COLOR
  FROM temp;
cs

 

쿼리 결과값입니다.

 


 

DECODE 활용해 컬럼 하나를 추가해보겠습니다.

if, else if문과 동일한 형태입니다.

1
2
3
4
5
6
7
8
  WITH temp AS (
    SELECT 'red' COLOR FROM dual UNION ALL
    SELECT 'blue' COLOR FROM dual
)
SELECT 
       COLOR
     , DECODE(COLOR, 'red''빨강''blue''파랑') AS COLOR_2
  FROM temp;
cs

 

쿼리 결과값입니다.

 

 


if, else if, else문과 동일한 형태입니다.

 

1
2
3
4
5
6
7
8
9
  WITH temp AS (
    SELECT 'red' COLOR FROM dual UNION ALL
    SELECT 'blue' COLOR FROM dual UNION ALL
    SELECT 'yellow' COLOR FROM dual
)
SELECT 
       COLOR
     , DECODE(COLOR, 'red''빨강''blue''파랑''기타') AS COLOR_2
  FROM temp;
cs

 

쿼리 결과값입니다.

 


DECODE를 활용한 NULL 체크입니다.

1
2
3
4
5
6
7
8
9
10
  WITH temp AS (
    SELECT 'red' COLOR FROM dual UNION ALL
    SELECT 'blue' COLOR FROM dual UNION ALL
    SELECT 'yellow' COLOR FROM dual UNION ALL
    SELECT NULL COLOR FROM dual
)
SELECT 
       COLOR
     , DECODE(COLOR, NULL'N''Y') AS COLOR_2
  FROM temp;
cs

 

쿼리 결과값입니다.

 


DECODE는 가독성, 유지보수 문제로 남용하지 않는 게 좋습니다.

때문에 적절하게 사용하면 좋겠죠...?