NULL 값

NULL 값 (NULL Values)

NULL은 SQL에서 누락된 데이터를 표현하는 특별한 값이에요. 어떤 타입의 컬럼이든 NULL 값을 가질 수 있는데, 논리적으로는 "이 필드의 값은 알 수 없다"는 뜻이랍니다. 오늘은 NULL이 쿼리와 함수에서 어떤 특별한 의미를 갖는지 함께 살펴볼까요?

출처: 문서

본문

NULL 값은 SQL에서 누락된 데이터를 표현하는 데 사용되는 특별한 값이에요. 어떤 타입의 컬럼이든 NULL 값을 포함할 수 있어요. 논리적으로 NULL 값은 "이 필드의 값은 알 수 없다"고 볼 수 있어요.

NOT NULL 한정자를 갖지 않는 어떤 필드에도 NULL 값을 삽입할 수 있어요:

CREATE TABLE integers (i INTEGER);
INSERT INTO integers VALUES (NULL);

NULL 값은 쿼리의 여러 부분뿐 아니라 많은 함수에서도 특별한 의미론을 가져요:

NULL과의 어떤 비교든, NULL = NULL을 포함해서 NULL을 반환해요.

IS NOT DISTINCT FROM을 사용하면 NULL 값끼리 서로 같다고 비교하는 동등 비교를 수행할 수 있어요. 값이 NULL인지 확인하려면 IS (NOT) NULL을 사용하면 돼요.

SELECT NULL = NULL;
NULL
SELECT NULL IS NOT DISTINCT FROM NULL;
true
SELECT NULL IS NULL;
true

NULL과 함수 (NULL and Functions)

입력 인자로 NULL을 받는 함수는 보통 NULL을 반환해요.

SELECT cos(NULL);
NULL

coalesce 함수는 이 규칙의 예외예요. 어떤 수의 인자든 받아서 각 행마다 NULL이 아닌 첫 번째 인자를 반환해요. 모든 인자가 NULL이면 coalesceNULL을 반환해요.

SELECT coalesce(NULL, NULL, 1);
1
SELECT coalesce(10, 20);
10
SELECT coalesce(NULL, NULL);
NULL

ifnull 함수는 coalesce의 2-인자 버전이에요.

SELECT ifnull(NULL, 'default_string');
default_string
SELECT ifnull(1, 'default_string');
1

NULLAND / OR

NULL 값은 ANDOR와 함께 사용될 때 특별한 동작을 보여요. 자세한 내용은 [Boolean 타입 문서]({% link docs/current/sql/data_types/boolean.md %})를 참고하세요.

NULLIN / NOT IN

... IN ⟨NULL을 포함한 무언가⟩{:.language-sql .highlight}의 동작은 ... IN ⟨NULL이 없는 무언가⟩{:.language-sql .highlight}와 달라요. 자세한 내용은 [IN 문서]({% link docs/current/sql/expressions/in.md %})를 참고하세요.

NULL과 집계 함수 (NULL and Aggregate Functions)

대부분의 집계 함수에서는 NULL 값을 무시해요.

NULL 값을 무시하지 않는 집계 함수로는 first, last, list, array_agg가 있어요. 이 집계 함수들에서 NULL 값을 제외하려면 [FILTER 절]({% link docs/current/sql/query_syntax/filter.md %})을 사용할 수 있어요.

CREATE TABLE integers (i INTEGER);
INSERT INTO integers VALUES (1), (10), (NULL);
SELECT min(i) FROM integers;
1
SELECT max(i) FROM integers;
10

더 알아보기 (Learn more)