NULL
값이 없는 컬럼을 일컫는 NULL값을 포함한 데이터에 SQL 함수를 사용했을 때 연산 결과값 예시를 소개합니다.
한 로우에서 어떤 컬럼에 값이 없을 때 그 컬럼을 NULL이라고 하거나 NULL 값을 가진다 라고 합니다.
NULL은 NOT NULL 제약과 PRIMARY KEY 제약이 걸리지 않은 모든 데이터 타입의 칼럼에 포함될 수 있습니다. 실제 값을 모르거나 아무런 의미 없는 값이 필요할 때 사용할 수 있습니다. NULL과 0은 다르기 때문에 NULL을 0으 로 나타내면 안 된다. 다만 문자 타입의 컬럼에 빈 문자열('')이 들어가면 NULL로 처리됩니다.
NULL을 포함한 산술연산의 결과는 항상 NULL입니다. 또한, 문자열 접합 연산(||)을 제외한 NULL을 포함하는 모든 연산의 결과도 NULL입니다.
함수에서의 NULL
REPLACE, NVL, CONCAT을 제외한 모든 상수 함수는 함수의 파라미터가 NULL일 경우 반환 값은 NULL 입니다. NVL 함수를 사용하면 NULL을 다른 값으로 반환할 수 있습니다. 컬럼 값이 NULL일 때 NVL(column, 0)= 0이 되며, 컬럼 값이 NULL이 아닐 때 NVL(column, 0) = column이 됩니다. 대부분의 집단 함수는 NULL을 무시합니다.
아래는 NULL을 포함한 데이터에 AVG 함수를 사용했을 때의 결과입니다.
DATA = {1000, 500, NULL, NULL, 1500}
AVG(DATA) = (1000 + 500 + 1500) /3 = 1000
NULL에 대한 비교조건
NULL을 검사할 수 있는 비교조건은 IS NULL과 IS NOT NULL만 가능합니다. NULL은 데이터가 없다는 것을 의미하므로 NULL과 NULL, NULL과 NULL이 아닌 다른 값을 서로 비교할 수 없습니다. (예외: DECODE 함수에서는 두 개의 NULL을 비교 가능)
SQL> SELECT DECODE(NULL, NULL, 1) FROM DUAL;
DECODE(NULL,NULL,1)
-------------------
1
위의 예에서 DECODE 함수를 통해 NULL이 서로 비교됬으며, 그 결과로 서로 같다는 의미인 '1'이 반환 됬음을 알 수 있습니다.
만일 NULL에 다른 비교조건을 사용하면, 결과는 UNKOWN으로 나타납니다. UNKNOWN으로 판별되는 조건은 거의 대부분 FALSE처럼 처리됩니다. 그 예로 SELECT 문에서 WHERE 절에 UNKNOWN으로 판별되는 조건이 있을 경우 반환되는 로우가 없습니다. UNKNOWN이 FALSE와 다른 점은 UNKNOWN 조건에 또 다른 연산자가 더해져도 결과는 UNKNOWN이라는 것 입니다.
아래는 FALES에 NOT 연산자를 사용한 결과와 UNKNOWN에 NOT 연산자를 사용한 결과의 차이를 보여줍니다.
NOT FALES = TRUE
NOT UNKNOWN = UNKNOWN
Last updated