Oracle

DECODE와 CASE의 차이

Code Bomber 2021. 2. 18.

조건 비교를 위해 SQL을 짤 때 DECODE와 CASE를 이용하곤 한다.

이걸 배우고 사용할 땐 그저 비슷한 용도이다라고 알고 사용했는데 어떤 점이 다른지 알아보았다.

 

1. DECODE

DECODE(VALUE, COND1, THEN1, CODNE2, THEN2 ...)

 

2. CASE

CASE
	WHEN CONDITION 1 THEN VALUE 1
	WHEN CONDITION 2 THEN VALUE 2
		...
	ELSE VALUE3
END

 

용법은 보통 위와 같다.

 

차이점

 

1. 속도

위 예제만 보더라도 CASE문의 길이가 보통 더 길다.

실행속도는 간단한 수준의 쿼리에서는 크게 차이나지 않았다.

하지만 어느정도 커지면 CASE문이 더 빠르다고 한다.

 

2. 사용 범위

그리고 또 다른 점이 있는데,

CASE는 STATEMENT이고 DECODE는 함수이다.

CASE는 SQL과 PL/SQL에서 모두 사용 가능하지만 DECODE는 SQL에서만 사용 가능하다.

 

3. 연산 범위

CASE문에서는 WHEN 이후에 조건문을 작성할 수 있지만 DECODE는 조건값과 같은지의

여부만 확인할 수 있다.

 

4. NULL 비교 연산

SELECT DECODE(NULL, NULL, 1, 0) DECODE_NULL
    , CASE NULL
        WHEN NULL THEN 1
        ELSE 0
        END CASE_NULL_1
    , CASE WHEN NULL IS NULL THEN 1
        ELSE 0
        END CASE_NULL_2
FROM dual;

위 SQL을 실행해보면 다음과 같은 결과가 출력된다.

즉, NULL과 NULL의 비교시에 DECODE는 TRUE를, CASE는 FALSE를 반환한다.

당연히 NULL IS NULL로 NULL비교 연산 시에는 TRUE를 반환한다.

 

 

결과적으로 보면, 간단한 쿼리에서는 DECODE를 쓰는 것이 좋을 것 같고,

복잡한 조건을 걸 때 등에는 CASE를 쓰면 좋겠다.

댓글