NULL у SQL і тризначна логіка
Коротко: В SQL NULL означає «невідомо», а не «порожньо» чи «нуль». Порівняння з NULL дають не істину й не хибу, а теж «невідомо».
Докладніше: В SQL три значення істинності: TRUE, FALSE, UNKNOWN. Рядок потрапляє до результату WHERE лише якщо умова TRUE.
Подробиці
- Порівняння:
NULL = NULL— UNKNOWN, а не TRUE. Тому використовуйтеIS NULLтаIS NOT NULL. Для рівності з урахуванням NULL:IS NOT DISTINCT FROM. - Типова пастка:
WHERE status <> 'x'не повертає рядки зіstatus IS NULL. - NOT IN:
x NOT IN (1, 2, NULL)ніколи не дає TRUE, бо порівняння з NULL — UNKNOWN. КращеNOT EXISTS. - Арифметика:
5 + NULL— NULL.COALESCE(a, 0)замінює NULL значенням за замовчуванням. - Агрегати:
COUNT(*)рахує рядки,COUNT(стовпець)— лише значення не NULL.SUMіAVGігнорують NULL. - Сортування: NULL стоїть на початку чи в кінці залежно від системи.
NULLS FIRST/LASTце фіксує. - Проєктування: За можливості оголошуйте
NOT NULLзі значенням за замовчуванням.
Див. також: поняття NULL, SQL