**NULL**은 누락되거나 알 수 없는 값을 나타냅니다 — 0도 아니고 빈 문자열도 아닌, 값의 부재입니다. NULL은 비교, 집계, 논리에서 특별하고 때로는 놀라운 동작을 하므로 흔한 버그의 원천입니다.
NULL은 "알 수 없음" — NULL과의 비교
email
email
email
email
**NULL**은 누락되거나 알 수 없는 값을 나타냅니다 — 0도 아니고 빈 문자열도 아닌, 값의 부재입니다. NULL은 비교, 집계, 논리에서 특별하고 때로는 놀라운 동작을 하므로 흔한 버그의 원천입니다.
email
email
email
email
NULL은 "알 수 없음"을 의미하므로, NULL과의 어떤 비교도 "알 수 없음"(참이 아님)을 산출하여 = NULL은 절대 매칭되지 않습니다. 반드시 IS NULL/IS NOT NULL을 써야 합니다 — 가장 흔한 NULL 실수입니다.
SQL은 3값 논리를 사용함: TRUE, FALSE, UNKNOWN (NULL).
NULL = NULL → UNKNOWN (참이 아님!)
NULL AND true → UNKNOWN
NULL OR true → TRUE
NOT NULL → UNKNOWN
→ UNKNOWN으로 평가되는 조건은 WHERE에서 비매칭으로 취급됨.
-- 집계는 NULL을 무시함 (COUNT(*) 제외)
SELECT AVG(salary) FROM employees; -- NULL이 아닌 salary만 평균
SELECT COUNT(salary) FROM employees; -- NULL이 아닌 것만 셈 (COUNT(*) = 모든 행)
-- NULL과의 산술 → NULL
SELECT price + NULL; -- NULL (NULL과의 모든 연산은 NULL)
집계는 NULL을 건너뛰고, NULL이 관여하는 모든 산술은 NULL을 산출합니다.
-- COALESCE — 첫 번째 NULL이 아닌 값 반환 (기본값 제공)
SELECT COALESCE(phone, 'No phone') FROM users; -- phone이 NULL이면 'No phone'
SELECT COALESCE(nickname, name, 'Unknown') FROM users; -- 첫 번째 NULL이 아닌 값
-- NULLIF — 두 값이 같으면 NULL 반환
SELECT NULLIF(value, 0); -- value가 0이면 NULL (예: 0으로 나누기 방지)
COALESCE는 NULL에 대한 대체값을 제공하고(기본값에 매우 흔함), NULLIF는 값을 조건부로 NULL로 변환합니다.
NULL 동작을 이해하는 것은 올바른 SQL을 작성하는 데 필수적입니다. NULL의 특별한 의미론은 미묘한 버그의 빈번한 원천이고, NULL은 실제 데이터에 끊임없이 나타나기 때문입니다(선택적 필드, 누락된 값, 매칭되지 않은 join).
가장 결정적이고 자주 틀리는 점은 NULL이 "알 수 없음"을 의미하므로 =로 비교할 수 없다는 것입니다(WHERE col = NULL이 조용히 아무것도 반환하지 않는 악명 높은 버그). IS NULL/IS NOT NULL을 써야 합니다.
SQL의 3값 논리(TRUE/FALSE/UNKNOWN, NULL과의 비교는 UNKNOWN을 산출하고 비매칭으로 취급됨)를 이해하는 것은 다양한 혼란스러운 동작을 설명하며 조건을 올바르게 작성하는 데 중요합니다.
집계가 NULL을 무시한다는 것(AVG, COUNT 등에 영향 — 때로 놀랍게), NULL과의 산술은 NULL을 산출한다는 것, 그리고 COALESCE(기본값/대체값 제공 — 매우 흔한 요구)와 NULLIF로 NULL을 처리하는 법을 아는 것은 실용적이고 자주 적용되는 지식입니다.
NULL은 실제 데이터베이스에 만연하고(모든 nullable 컬럼, 모든 LEFT JOIN), NULL의 비직관적 동작(특히 비교 문제와 3값 논리)이 실제로 디버깅하기 어려운 버그를 일으키므로, NULL이 어떻게 동작하는지 이해하는 것 — 비교, 논리, 집계, 처리 — 은 올바른 SQL 작성에 핵심적이고 반드시 알아야 할 지식이자, 자주 잘못 다뤄지는 데이터베이스 측면에 대한 이해를 드러내는 흔한 인터뷰 주제입니다.
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기