NULL в SQL ведёт себя неинтуитивно: NULL = NULL возвращает не TRUE, агрегатные функции игнорируют NULL, а CASE WHEN требует аккуратного обращения с пустыми значениями. Интервьюеры любят задачи-ловушки на тему IS NULL, COALESCE, NULLIF и трёхзначной логики. Непонимание NULL — одна из самых частых ошибок даже у опытных кандидатов.
Всего в этом разделе 20 вопросов. Каждый — с правильным ответом и кратким разбором теории. Разбито на 4 части по 5 вопросов.
Проверка `age IS NULL` для пропущенного возраста истинна, поэтому вернётся `'unknown'`. Это типичный паттерн для аналитики: сначала обрабатываем пропуски (чтобы не терять строки и не смешивать смысл), затем ветвим по значениям.
В SQL сравнения вроде `email = NULL` или `email <> NULL` возвращают не `TRUE`/`FALSE`, а `UNKNOWN`, потому что `NULL` означает «неизвестно». В `WHERE` проходят только строки, где условие `TRUE`, поэтому такие сравнения не отберут пропуски. Для проверки пропуска используйте `email IS NULL`. Вариант `COALESCE(email, '') = ''` смешивает `NULL` и пустую строку и может дать неверный смысл, если пустая строка встречается как отдельное значение.
Сравнения `channel <> NULL` и `channel = NULL` не работают как ожидается, потому что результат будет `UNKNOWN`. Правильный способ отобрать строки с заполненным значением — `WHERE channel IS NOT NULL`. `COALESCE(channel, 'unknown') = 'unknown'` наоборот отбирает строки, где `channel` равен `NULL` (или реально равен `'unknown'`, если такое значение встречается).
В выражении `CASE WHEN is_active = 1 THEN 'active' END` есть только одна ветка и нет `ELSE`. Для строки с `is_active = 0` условие `is_active = 1` ложно, поэтому ни одна ветка не сработает и `CASE` вернёт `NULL`. Чтобы получить явное значение, добавляют `ELSE 'inactive'`.
В `CASE` условия проверяются по порядку. Для `amount = NULL` условие `amount IS NULL` истинно (`TRUE`), поэтому сразу возвращается `'missing'`, и до следующих `WHEN` дело не дойдёт. Это важно при построении категорий: наиболее специфичные/важные случаи (часто `IS NULL`) удобно ставить выше.
В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.
Тренировать в Telegram