EMZETT.
Увійти

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