행위

LNNVL 함수

DB CAFE

thumb_up 추천메뉴 바로가기


LNNVL[편집]

android “ logical not null value “

  • LNNVL 함수는 해당 컬럼에 NULL이 존재할 경우 NULL 처리와 조건문을 한 번에 연산하기 위해서 사용
  • LNNVL 함수는 아래의 상황일 때 조건이 TRUE이다.
    • 컬럼이 NULL인 경우 = TRUE
    • 함수 내부 조건이 FALSE인 경우 = TRUE
  • 오라클의 NULL 처리를 정확히 이해 하기


  • 오라클 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은 잘못된 결과를 출력한다.