본문 바로가기

[오라클 레퍼런스 함수] LNNVL - 조건이 FALSE/UNKNOWN이면 TRUE 반환, TRUE면 FALSE 반환

by ㅇㅍㅍ 2023. 8. 9.
[오라클 레퍼런스 함수] LNNVL - 조건이 FALSE/UNKNOWN이면 TRUE 반환, TRUE면 FALSE 반환
728x90

 

 

LNNVL

 

구문

LNNVL(condition)

 

목적

LNNVL 함수는 조건식의 한 쪽 또는 양쪽 피연산자가 null일 수 있는 상황에서 조건식을 평가하는 간결한 방법을 제공합니다. 이 함수는 쿼리의 WHERE 절이나 검색된 CASE 표현식의 WHEN 조건으로 사용될 수 있습니다. 인자로 조건식을 받아들이며, 조건이 FALSE 또는 UNKNOWN이면 TRUE를 반환하고, 조건이 TRUE이면 FALSE를 반환합니다. LNNVL은 스칼라 표현식이 나타날 수 있는 모든 위치에서 사용할 수 있으며, 일반적으로 IS [NOT] NULL, AND, 또는 OR 조건이 필요하지만 null 가능성을 처리하기 위해 사용해야 할 때에도 사용할 수 있습니다.

Oracle Database는 때로 NOT IN 조건을 NOT EXISTS 조건으로 다시 작성하는 데 내부적으로 LNNVL 함수를 사용합니다. 이러한 경우 EXPLAIN PLAN의 출력에서 이 작업이 계획 테이블 출력에 표시됩니다. 조건식은 스칼라 값을 평가할 수 있지만, AND, OR, 또는 BETWEEN을 포함하는 복합 조건은 될 수 없습니다.

다음 표는 a = 2이고 b가 null인 경우 LNNVL이 반환하는 값을 보여줍니다.

Condition Truth of Condition LNNVL Return Value
a = 1 FALSE TRUE
a = 2 TRUE FALSE
a IS NULL FALSE TRUE
b = 1 UNKNOWN TRUE
b IS NULL TRUE FALSE
a = b UNKNOWN TRUE

 

예제

만약 20% 미만의 커미션 비율을 가진 직원 수를 파악하려 한다면, 커미션을 받지 않는 직원도 포함하여야 합니다. 다음 쿼리는 실제로 20% 미만의 커미션을 받는 직원들만을 반환합니다:

SELECT COUNT(*)
  FROM employees
  WHERE commission_pct < .2;

  COUNT(*)
----------
        11

 

아예 커미션을 받지 않는 72명의 직원도 포함하려면, 다음과 같이 LNNVL 함수를 사용하여 쿼리를 다시 작성할 수 있습니다:

SELECT COUNT(*)
  FROM employees
  WHERE LNNVL(commission_pct >= .2);

  COUNT(*)
----------
        83

 


출처: 오라클 레퍼런스

원문 링크: Oracle LNNVL 함수 문서

 

반응형

댓글