SELECT EMP_NAME,
100000 + SALARY/18,
200000 + SALARY*2/18
FROM TEMP;
널이란 컬럼에 값이 아무것도 없다는 뜻이다.
널 값을 제대로 처리하지 못하게 되면 뜻하지 않은 결과가 반환되어 큰 낭패를 본다.
DML을 이용하여 자료를 다룰 때는 항상 NULL을 염두에 두고 다루어야 한다.
NUMBER형 자료를 NULL과 연산하면 결과는 항상 NULL이 된다.
문자형 자료는 주로 조건절에서 비교될 때 주의 해야 한다.
조건절에서는 숫자형도 마찬가지이다.
NULL이 포함될 우려가 있는ㄴ 컬럼을 이용할 때는 항상 NVL 함수를 이용하여 값을 치환시켜 사용하는 습관을 들여야 한다.
숫자형 컬럼이나 변수에 NULL이 들어갈 우려가 있다면 0이나 1등 다른 적잘한 숫자로 치환을 한 후 연산에 사용한다.
문자형 컬림이나 변수에 NULL이 들어갈 우려가 있다면 ''
스페이스나 다른 특정 문자 값으로 치환하여 조건절에 이용한다.
조건절에서 비교 연산자를 사용할 때도 NULL의 비교는 일반 값과 다르게 비교한다.
A라는 문자형 컬럼의 값이 1과 같으냐 또는 드르냐를 조건에서 비교할 때 다음과 같이 쓰게 된다.
- 같은지 비교 : WHERE A = '1'
- 다른지 비교 : WHERE A <> '1'
하지만 A라는 문자형 컬럼의 값이 NULL인지를 비교하고 싶을 때는 다음과 같이 사용하면 된다.
- 같은지 비교 : WHERE A IS NULL
- 다른지 비교 : WHERE A IS NOT NULL
절대로 A=NULL
또는 A<>NULL
로 사용하면 안된다.
- 에러가 발생하지는 않지만 의도한 바와 전혀 다른 결과가 나올 수 있기 때문이다.
SELECT EMP_NAME FROM TEMP WHERE HOBBY IS NOT NULL;
SELECT EMP_NAME FROM TEMP WHERE HOBBY <> NULL;
SELECT EMP_NAME,
NVL(HOBBY, '없음')
FROM TEMP;
SELECT EMP_NAME FROM TEMP WHERE NVL(HOBBY, '등산') = '등산';