
면접에 단골로 나오는 질문이다.
일반적으로 다음과 같이 설명할 수 있다.
사용할 수 없는 데이터, 존재하지 않는 값으로 "결측치" 라고도 한다.
이런 결측치를 바탕으로 사용할 수 있는 함수들에 대해 알아보자
입력된 값이 null이면 실제 값으로 리턴하는 함수로 주로 결측치 처리에 사용할 수 있다.
nvl(입력값, 실제값)
단, 입력 값과 실제 값의 자료형은 일치해야 한다.
SELECT
( salary * 12 ) + ( salary * 12 * nvl(commission_pct, 0) ) AS "Annual"
FROM
hr.employees;
tip : '_'의 이름은 언더스쿱이다.
nvl과 달리 더 많은 인자값을 사용할 수 있다. 입력값의 참 여부에 따라 출력되는 값을 조정할 수 있다.
nvl2(exp1, exp2, exp3)
단, exp2와 exp3의 자료형은 일치해야 한다.
SELECT
nvl2(commission_pct, (salary*12) + (commission_pct*salary*12), (salary * 12))as annul
FROM
hr.employees;
(salary*12) + (commission_pct*salary*12)을 반환한다.(salary * 12)을 반환한다.'코어레스'라고 읽는다. 연속적이고 반복적으로 null을 판단하며 null이 아닐 때 까지 수행한다.
coalesce(exp1, exp2, exp3, ..., expn)
SELECT
coalesce((salary*12) + (commission_pct*salary*12),(salary * 12), 0)
FROM
hr.employees;
단, 함수 내의 모든 자료형은 일치해야 한다.
(salary*12) + (commission_pct*salary*12)의 null여부를 판단한다.(salary*12) + (commission_pct*salary*12)이 null이 아니면 해당 값을 그대로 반환하고 null이면 다음 인자 값의 null여부를 판단한다.특이하게 입력된 인자값을 비교하여 null을 반환하는 함수이다.
nullif(exp1, exp2)
SELECT
nullif(length(last_name), length(first_name)) AS "nullif"
FROM
hr.employees;
(length(last_name)을 반환한다.PL/SQL로 작성된 nullif의 코드는 다음과 같다.
-- nullif의 pl/sql 구조
if exp1 = exp2 then
null;
else:
exp1;
end if;