말랑말랑제리스타일

[ORACLE SQL] DECODE,NVL,NVL2 차이점과 사용법 본문

데이터베이스/Oracle SQL

[ORACLE SQL] DECODE,NVL,NVL2 차이점과 사용법

제리제리 2022. 3. 14. 11:23

오라클 SQL문 중 NULL을 처리하는 다양한 구문이 있는데 그 중 가장 대표적인 DECODE, NVL,NVL2의 사용법과 차이점을 알아봅시다.

DECODE,NVL,NVL2 사용법

반응형

먼저 DECODE와 NVL과 NVL2의 사용법입니다.
엄연히 말하면 DECODE는 NULL 처리용 함수는 아니지만 DECODE를 이해하면 NVL과 NVL2를 이해하기 훨씬 쉽기 때문에 DECODE의 사용법 먼저 설명드립니다.

DECODE 사용법

반응형

DECODE의 구문은 아래와 같습니다.

DECODE(값,비교값,일치할 경우,불일치할 경우)

만약 이 DECODE를 다중으로 사용할 경우 아래의 형태로도 사용 가능합니다.

SELECT DECODE(VAL,'1','T1','2','T2','T3') 
FROM (SELECT '1' AS VAL FROM DUAL UNION SELECT '3' AS VAL FROM DUAL) A
--DECODE(값,비교값1,일치할경우,비교값2,일치할 경우,그외의경우)

즉, IF나 CASE를 보다 짧고 간결하게 사용하기 위한 오라클 함수가 DECODE입니다.

NVL 사용법

반응형

여기서 NVL은 NULL인 경우 값을 치환하는 함수로 2개의 매개변수를 사용하며, DECODE를 이용해 표현하면 아래와 같습니다.

NVL(값,대치값(값이 NULL인 경우 출력할 값))
DECODE(값,NULL,대치값,값)

즉 값이 NULL이 아닌 경우 값을 그대로 출력하고
NULL인 경우 대치값을 출력하는거죠.
그렇다면 NVL2는 어떨까요?

NVL2 사용법 및 NVL과 차이점

반응형

NVL2는 NVL과 다르게 3개의 매개변수를 사용합니다.
값이 들어가고 NULL일 경우 출력할 값, NULL이 아닐 경우출력할 값 이렇게 세개인데요.
SQL문으로 표현하면 아래와 같습니다.

NVL2(값
       ,대치값1(NULL이 아닌 경우 출력값)
       ,대치값2(NULL인 경우 출력할 값))
DECODE(값,NULL,대치값2,대치값1)

NVL2를 사용해 값을넣어서 NULL인 경우 첫번째 대치값을, 값이 있는 경우 두번째 대치값을 출력합니다.
즉, NVL과 NVL2의 차이점은 NVL은 NULL이 아닌 경우 자기 자신을 출력하고 NVL2는 NULL이 아닌 경우 출력값을 지정해 출력해주는거죠.
따라서 NVL2에 대치값2를 값과 똑같이 입력해주면 NVL과 동일하게 사용할 수 있습니다.
 
그렇다면 왜 NVL을 사용할까요?

반응형

앞서 말한 것처럼 NVL,NVL2 등을 사용하는 이유는 DECODE보다 짧고 간편하기 때문입니다.
따라서 NVL로 표현 가능한 경우 NVL로, 불가능한 경우 NVL2를 사용하는 것이 적절합니다.

반응형
Comments