Условие
Сколько будет 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;Подводные камни
SUM(col)пропускаетNULL— это исключение из правила. АналогичноAVG,COUNT(col),MIN,MAX. А вотCOUNT(*)считает строки, включая те, где все поляNULL.x = NULLникогда не сработает — толькоx IS NULL.NOT INсNULLв подзапросе вернёт пустой результат, потому чтоx <> NULL=UNKNOWN. ИспользуйтеNOT EXISTS.
Эталонный ответ
NULL (любая арифметика с NULL даёт NULL).