NULL

값이 없는 컬럼을 일컫는 NULL값을 포함한 데이터에 SQL 함수를 사용했을 때 연산 결과값 예시를 소개합니다.

한 로우에서 어떤 컬럼에 값이 없을 때 그 컬럼을 NULL이라고 하거나 NULL 값을 가진다고 합니다. NULL은 NOT NULL 제약과 PRIMARY KEY 제약이 걸리지 않은 모든 데이터 타입의 칼럼에 포함될 수 있습니다. 실제 값을 모르거나 아무런 의미 없는 값이 필요할 때 사용할 수 있습니다. NULL과 0은 다르기 때문에 NULL을 0으 로 나타내면 안 됩니다. 다만 문자 타입의 컬럼에 빈 문자열('')이 들어가면 NULL로 처리됩니다.

NULL을 포함한 산술연산의 결과는 항상 NULL입니다. 또한, 문자열 접합 연산(||)을 제외한 NULL을 포함하 는 모든 연산의 결과도 NULL입니다.

NULL + 1 = 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 연산자를 사용한 결과의 차이를 보여 준다.

Last updated