На первый взгляд,
NULL — просто отсутствие значения. Но на практике это частый источник багов, неверных аналитик и проблем в бизнес-логике.📉 Антипаттерн: беспечное обращение с NULL
Примеры:
SELECT * FROM users WHERE age > 18; -- Пользователи с age = NULL не попадут
Ты думаешь, что отбираешь всех взрослых, но
age = NULL тут "выпадает", ведь NULL > 18 → UNKNOWN.
WHERE col1 = col2 -- Не сработает, если хотя бы одно значение NULL
🙈 Проблема:
NULL не равно даже самому себе (NULL != NULL).📉 Итоги: ошибки в JOIN'ах, WHERE-фильтрах, расчетах.
🛡 Как защититься:
✅ Явно учитывай
NULL:
WHERE age > 18 OR age IS NULL -- если хочешь включить "неизвестный возраст"
✅ Используй
COALESCE:
SELECT COALESCE(discount, 0) FROM orders -- подставим 0, если скидка не указана
✅ Проверяй
NULL через IS NULL / IS NOT NULL✅ Для агрегаций учитывай поведение
NULL:
AVG(column) -- пропустит NULL'ы, но COUNT(column) тоже не посчитает их!
Вывод:
NULL — не "ничего", а "неизвестно".Пиши запросы так, как будто
NULL всегда где-то прячется — и он не на твоей стороне.Сохрани, чтобы не ловить грабли 💥
📲 Мы в MAX
#db
👉 @database_info
