[ORACLE] NULL관련 함수 nvl, nvl2, coalesce, nullif

privatekim·2024년 6월 13일
0

ORACLE

목록 보기
2/38

NULL이란?

면접에 단골로 나오는 질문이다.

일반적으로 다음과 같이 설명할 수 있다.

사용할 수 없는 데이터, 존재하지 않는 값으로 "결측치" 라고도 한다.

이런 결측치를 바탕으로 사용할 수 있는 함수들에 대해 알아보자


nvl

입력된 값이 null이면 실제 값으로 리턴하는 함수로 주로 결측치 처리에 사용할 수 있다.

nvl 문법

nvl(입력값, 실제값)

단, 입력 값과 실제 값의 자료형은 일치해야 한다.

nvl 문법 예시

SELECT
    ( salary * 12 ) + ( salary * 12 * nvl(commission_pct, 0) ) AS "Annual"
FROM
    hr.employees;

tip : '_'의 이름은 언더스쿱이다.

작동 방식

  1. nvl 안의 첫 번째 인자 값인 commission_pct의 null여부를 판단한다.
  2. commission_pct이 null이면 0을 반환한다.
  3. commission_pct이 null이 하니면 commission_pct을 그대로 반환한다.

nvl2

nvl과 달리 더 많은 인자값을 사용할 수 있다. 입력값의 참 여부에 따라 출력되는 값을 조정할 수 있다.

nvl2 문법

nvl2(exp1, exp2, exp3)

단, exp2와 exp3의 자료형은 일치해야 한다.

nvl2 문법 예시

SELECT
    nvl2(commission_pct, (salary*12) + (commission_pct*salary*12), (salary * 12))as annul
FROM
    hr.employees;

작동 방식

  1. nvl2 안의 첫 번째 인자 값인 commission_pct의 null여부를 판단한다.
  2. commission_pct이 null이 아니면 두 번째 인자 값인 (salary*12) + (commission_pct*salary*12)을 반환한다.
  3. commission_pct이 null이면 세 번째 인자 값인 (salary * 12)을 반환한다.

coalesce

'코어레스'라고 읽는다. 연속적이고 반복적으로 null을 판단하며 null이 아닐 때 까지 수행한다.

coalesce 문법

coalesce(exp1, exp2, exp3, ..., expn)

coalesce 문법 예시

SELECT
    coalesce((salary*12) + (commission_pct*salary*12),(salary * 12), 0)   
FROM
    hr.employees;

단, 함수 내의 모든 자료형은 일치해야 한다.

작동 방식

  1. coalesce안의 첫 번째 인자 값인 (salary*12) + (commission_pct*salary*12)의 null여부를 판단한다.
  2. (salary*12) + (commission_pct*salary*12)이 null이 아니면 해당 값을 그대로 반환하고 null이면 다음 인자 값의 null여부를 판단한다.
  3. 2의 과정을 마지막 인자값 까지 반복 수행한다.

nullif

특이하게 입력된 인자값을 비교하여 null을 반환하는 함수이다.

nullif 문법

nullif(exp1, exp2)

nullif 문법 예시

SELECT
    nullif(length(last_name), length(first_name)) AS "nullif"
FROM
    hr.employees;

작동 방식

  1. nullif안의 두 인자값을 비교하여 그 값이 일치하는지 판단한다.
  2. 일치하면 null을 반환하고 일치하지 않으면 첫 번째 인자값인 (length(last_name)을 반환한다.

PL/SQL로 작성된 nullif의 코드는 다음과 같다.

-- nullif의 pl/sql 구조
if exp1 = exp2 then
	null;
else:
	exp1;
end if;

0개의 댓글