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이면 coalesce도 NULL을 반환해요.
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
NULL과 AND / OR
NULL 값은 AND와 OR와 함께 사용될 때 특별한 동작을 보여요.
자세한 내용은 [Boolean 타입 문서]({% link docs/current/sql/data_types/boolean.md %})를 참고하세요.
NULL과 IN / 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