[Oracle] 오라클 LNNVL 함수 사용법 쉽게 정리

오라클에서 LNNVL 함수는 간단한 함수 같지만, 함수의 기능을 제대로 이해하지 않으면 아주 복잡하게 느껴지는 함수이다. LNNVL 함수는 해당 컬럼에 NULL이 존재할 경우 NULL 처리와 조건문을 한 번에 연산하기 위해서 사용한다.

 

LNNVL 함수는 아래의 상황일 때 조건이 TRUE이다.

 

  • 컬럼이 NULL인 경우 = TRUE
  • 함수 내부 조건이 FALSE인 경우 = TRUE

 

오라클의 NULL 처리를 정확히 이해하고 있지 않으면 아래를 먼저 읽어보기 바란다.

 

[Oracle] 오라클 NULL 사용시 주의사항 정리

 

사용 예시 - 1

SELECT ename
     , job
     , comm
  FROM emp
 WHERE deptno = 30
   AND LNNVL(comm = 0)

 

 

LNNVL(comm = 0)

- comm is null 

- comm != 0

 

위의 2가지 조건을 한 번에 조건문을 선언한 것과 동일하다.

 

SELECT ename
     , job
     , comm
  FROM emp
 WHERE deptno = 30
   AND (comm is null OR comm != 0)

 

 

LNNVL(comm = 0)과 동일한 결과가 조회되는 것을 확인할 수 있다.

 

LNNVL 함수를 사용하는 이유는 해당 컬럼에 NULL이 존재할 경우 해당 NULL 데이터도 함께 조회되도록 하기 위해서이다.

 

LNNVL 함수 내부의 조건은 조회하려고 하는 조건의 반대 조건으로 부여하는 것을 기억해야 한다.

 

사용 예시 - 2

SELECT ename
     , job
     , comm
  FROM emp
 WHERE deptno = 30
   AND LNNVL(comm > 300)

 

 

LNNVL(comm > 300)

- 커미션(comm)이 300 이하의 직원을 조회하는 쿼리이다.

 

아래의 조건과 동일한 결과이다.

- comm is null OR comm <= 300

- NVL(comm, 0) <= 300

 

SELECT ename
     , job
     , comm
  FROM emp
 WHERE deptno = 30
   AND NVL(comm, 0) <= 300

 

 

LNNVL(comm > 300) 조건과 NVL(comm, 0) <= 300 조건이 항상 동일한 결과라고 생각하면 안 된다. 위의 경우는 NULL이 300 이하라고 판단한 경우만 동일한 결과가 출력된다.

 

만약 comm이 300 이상인 직원과 comm이 NULL인 직원을 동시에 조회한다면 LNNVL(comm < 300) 이렇게 조건을 부여할 수 있으며, NVL(comm, 0) >= 300은 잘못된 결과를 출력한다.

 

예제쿼리(테이블뷰포함).txt
0.00MB

 

 

댓글

Designed by JB FACTORY