Null이란
- 값이 없음을 나타내는 연산자로 DBMS에서 null값의 유무는 굉장히 중요하다.
- null값을 허용하는 필드에 대한 연산이 일어날 경우, 값과 null의 연산의 결과가 null이 되어버리기 때문에
연산결과에 !중대한 영향!을 미치게 되므로 주의가 필요하다.
Null 값으로 인한 문제
다음의 쿼리문을 보자.
SELECT name, pay, bonus, pay + bonus FROM t_professeor;
t_professeor 테이블에서 이름(NAME), 월급(PAY), 보너스(bonus), 월급+보너스(pay+bonus)를 출력하려고 한다.
!! 하지만, t_professor테이블의 bonus 필드는 null값을 허용하는 필드다.
따라서, bonus에 null값이 들어있는 사람이 있다면 pay+bonus 의 결과는 null 되어버린다.
저 쿼리문의 결과로 우리가 기대하는 것은 만약 bonus가 null이라면 0으로 대체해서 pay값만 나와야한다는 것이다.
그러므로 null값을 0 또는 다른 적절한 값으로 바꿔서 연산 결과에 오류가 없도록 하는 nul을 처리하는 과정이 필요한데,
이런 기능을 수행하는 함수가 바로 nvl과 nvl2다.
Null 값의 처리
(1) NVL 함수
NVL('컬럼명', 치환할 값);
컬럼의 값이 null인지 체크하여 null이면 입력받은 값으로 치환
Ex) SELECT NAME, PAY, NVL(bonus, 0) BONUS, PAY*12+NVL(bonus, bonus, 0) 연봉 FROM T_PROFESSOR;
= 교수들의 이름(name), 급여(pay), 보너스(bonus ), 연봉(pay) 출력하라.
단, 연봉은 pay * 12 + bonus 로 계산, bonus 가 없는 교수는 0 으로 계산
(2) NVL2 함수
NVL2('컬럼명', 값1, 값2);
컬럼 값이 null이 아니면 값1로, null이 맞으면 값2로 치환
NVL과 동일한 예제에 대해서 NVL2로 바꾸면
SELECT NAME, PAY, NVL2(bonus, bonus, 0) BONUS, PAY*12+NVL2(bonus, bonus, 0) 연봉 FROM T_PROFESSOR;
'SQL > Oracle' 카테고리의 다른 글
09_SQL함수(5) 단일행함수: 날짜함수 (0) | 2019.09.22 |
---|---|
08_SQL함수(3) 단일행함수: 형변환함수 (0) | 2019.09.22 |
06_SQL함수(1) 단일행함수: 문자함수 (0) | 2019.09.20 |
05 _ SQL기초 (4) Select문 사용과 WHERE 조건절 (0) | 2019.09.18 |
04_SQL 기초 (3) DML의 기본 (0) | 2019.09.16 |