DB/Oracle

[SQL/Oracle] null 치환하기 - NVL(), NVL2()

jimkwon 2022. 5. 17. 10:46
반응형

 

 

NVL(column, replace)

 

테이블을 조인하거나 조회하다 보면 컬럼에 NULL이 들어가는 일은 빈번하다.

그대로 값을 출력할 수도 있지만, 특정 경우에는 NULL값이 들어가면 오류가 생기는 경우가 있다.

그럴때 쓰이는 함수가 NVL이다.

 

NVL(컬럼, 치환할 값) - null값을 다른 값으로 치환

 

간단한 예제로 살펴보자,

총 급여 (sal + comm 컬럼의 합)을 구하고 싶은 경우,

null이 연산에 들어가면 값이 모두 null이 되어버린다. 이럴 때, null을 0으로 치환해보자

 

select sal, comm, sal+comm, sal+nvl(comm, 0) from emp;

 

 

 

 

실행 결과는 다음과 같다.

기존 comm이 NULL인 경우, sal과 합산하면 null이 되어버리지만

NVL()함수로 값을 0으로 치환하면

정상적으로 값을 추출할 수 있다.

 

 

 

 

 

 

 

 

 NVL2(column, null이 아닐 때, null일 때)

 

nvl2(컬럼, 널이 아닐때 치환값, 널일때 치환값)

 

NVL의 확장된 버전이다. 자주 쓰일 일은 없겠지만 null이 아닐때도 치환할 경우라면

해당 함수를 사용하면 된다.

 

 

emp 테이블이 있다고 가정하고, deptno 컬럼이 30인 사원들의 사원 번호와 comm을 조회할 때, NULL의 여부를 파악하는 쿼리문을 작성해보자.

 

select deptno, nvl2(comm, 'Exist', 'NULL') as "NVL2"
from emp
where deptno=30;

 

 

 

실행결과는 다음과 같다.

 

 

 

 

쿼리문을 구현하며 생각보다 NULL값을 처리할 일이 많다. 알아두면 유용할것이다.