반응형

@notepad_jj2

츄르사려고 코딩하는집사입니다.


우리가 쿼리를 짜면서 흔히 사용하고 있는 함수가 있습니다.

바로 DECODE 함수죠.

 

쿼리를 짜면서 조건에 따라 쿼리의 파라미터를 다르게 하거나 하는 등에 사용하는 CASE ~ THEN 문을 사용합니다.

 

예를 들어, 아래의 코드와 같습니다.

SELECT
	CASE WHEN A = '121' THEN B ELSE C END AS COLTEST
  FROM TEST_TABLE

 

위의 코드처럼, 쿼리를 짜면서 비교 연산을 하거나, 등가 연산을 할 때 CASE ~ WHEN을 사용할 수 있습니다.

하지만, 여기서 등가 연산을 하기 위해 사용하는 함수가 있는데 그게 바로 DECODE 함수입니다. 

DECODE 함수는 ORACLE에서만 사용할 수 있기 때문에, MYSQL이나 MSSQL을 사용해야 하는 경우에는 DECODE를 CASE ~ WHEN으로 바꿔야 합니다.


DECODE 함수 사용 방법

DECODE 함수는 아래처럼 구성이 되어 있습니다.

DECODE(VALUE, TEST1, RES1, TEST2, RES2, TEST3, RES3, RES4)

 

이제, 위에서 말했던 것처럼 DECODE 함수는 비교 연산이 아닌 등가 연산만 할 수 있습니다.

그렇기 때문에, 위의 함수 사용법의 해석은 아래와 같습니다.

 

VALUE가 TEST1일 때에는 RES1을 리턴하고, TEST2 일때는 RES2, TEST3 일때는 RES3 그 외에는 RES4로 리턴한다.

 

즉 위의 코드를 파이썬(PYTHON)에서 사용하면 아래의 코드와 같습니다.

if VALUE == TEST1 : 
	return RES1
    
elif VALUE == TEST2 : 
	return RES2
    
elif VALUE == TEST3 : 
	return RES3
    
else : return RES4

DECODE와 CASE의 NULL 처리

DECODE와 CASE의 차이점 중 하나는 NULL 비교 연산을 할 때 다른 결과값을 출력합니다.

DECODE 같은 경우에는 NULL = NULL 일 때, TRUE를 반환하지만, CASE 같은 경우에는 NULL = NULL일 때, TRUE를 반환하지 않습니다.

 

SELECT DECODE(NULL, NULL, 1, 0) AS DECODE_NULL,
       CASE NULL
       		WHEN NULL THEN 1
       ELSE 0
       END AS CASE_NULL
  FROM DUAL;

 

위의 코드로 쿼리를 돌리게 되면, 아래와 같이 DECODE 함수를 사용할 경우에는 1이 출력되지만, CASE를 사용하게 되면 0을 출력하게 됩니다.

 

 


DECODE와 CASE의 차이점

DECODE와 CASE의 차이점은 분명하게 드러납니다.

 

1. NULL = NULL 반환

위에서 했던 것처럼, NULL = NULL 일 때는 DECODE는 TRUE를 반환하고, CASE는 TRUE를 반환하지 않습니다.

 

2. 속도 차이

DECODE와 CASE의 속도 차이는 짧고 단순한 쿼리문에서는 그렇게 크게 차이가 나지 않습니다.

하지만, 길고 복잡하면서 로직을 많이 타는 쿼리문일 경우에는 DECODE 함수보다 CASE일 경우에 속도가 더 빠릅니다.

 

3. 연산 차이

DECODE는 등가연산만 가능하고, CASE는 등가연산은 물론, 비교연산까지 가능합니다.

 

4. 사용 범위

DECODE 함수는 ORACLE에서만 사용이 가능하기 때문에, MYSQL이나 MS SQL에서는 CASE 문을 사용해야 합니다.


 

 

 

 

 

 

 

 

 

 

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기