Собесов

Сколько будет 5 + NULL в SQL?

SQLNULL и трёхзначная логикаЛёгкаяJunior

Условие

Сколько будет 5 + NULL?

Решение

5 + NULL = NULL.

NULL в SQL — это «значение неизвестно». Любая арифметическая операция с неизвестным операндом тоже даёт неизвестный результат. Это распространяется на всё:

Выражение Результат
5 + NULL NULL
5 * NULL NULL
5 / NULL NULL
NULL = NULL NULL (не TRUE!)
NULL <> NULL NULL
NULL IS NULL TRUE
concat('a', NULL) NULL (в PostgreSQL/Oracle)

Почему так

В SQL действует трёхзначная логика: TRUE / FALSE / UNKNOWN (NULL). Сравнение и арифметика с NULL всегда возвращают UNKNOWN. Поэтому в WHERE строки с NULL в проверяемом выражении отсекаются — ведь условие должно быть TRUE, а UNKNOWN — это не TRUE.

Как обойти

-- COALESCE подменяет NULL на значение по умолчанию
SELECT 5 + COALESCE(x, 0) FROM t;
 
-- IFNULL (MySQL) / NVL (Oracle) — синонимы
SELECT 5 + IFNULL(x, 0) FROM t;

Подводные камни

  1. SUM(col) пропускает NULL — это исключение из правила. Аналогично AVG, COUNT(col), MIN, MAX. А вот COUNT(*) считает строки, включая те, где все поля NULL.
  2. x = NULL никогда не сработает — только x IS NULL.
  3. NOT IN с NULL в подзапросе вернёт пустой результат, потому что x <> NULL = UNKNOWN. Используйте NOT EXISTS.

Эталонный ответ

NULL (любая арифметика с NULL даёт NULL).

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти