УРОК 11 / 27· ≈ 20 мин

NULL, COALESCE и NULLIF

NULL — это «неизвестно», а не ноль

NULL означает, что значения нет или оно неизвестно: самолёт ещё не вылетел — значит, actual_departure пустой. Главное свойство NULL: любое сравнение с ним даёт «неизвестно», а не «истину» или «ложь». Поэтому NULL = NULL не истинно, и строки с NULL молча выпадают из условий вроде actual_departure > ….

Что важно помнить:

  • проверка на пустоту — только IS NULL / IS NOT NULL;
  • агрегаты COUNT(столбец), SUM, AVG, MIN, MAX пропускают NULL; поэтому COUNT(*) - COUNT(actual_departure) — это число рейсов без фактического вылета;
  • арифметика с NULL даёт NULL: 5 + NULL — это NULL.

COALESCE — подставить значение вместо пустого

COALESCE(a, b, c) возвращает первое непустое значение из списка. Это способ показать «0» или «нет данных» вместо пустой ячейки:

SELECT ticket_no, COALESCE(boarding_no, 0) AS boarding_no
FROM boarding_passes;

NULLIF — защита от деления на ноль

NULLIF(a, b) возвращает NULL, если a = b, иначе — a. Главное применение — знаменатель дроби: x / NULLIF(y, 0) вместо ошибки «деление на ноль» вернёт NULL.

Типичные ошибки

  • WHERE actual_departure = NULL — не найдёт ничего. Только IS NULL.
  • WHERE status <> 'Arrived' не находит строки с пустым статусом. Сравнение с NULL — «неизвестно», и такие строки отбрасываются. Если они нужны, добавьте OR status IS NULL.
  • Среднее «теряет» строки. AVG(x) считает среднее только по заполненным значениям. Если пустые нужно считать нулями — AVG(COALESCE(x, 0)).

Практика

6
  1. Тест 1 — Что вернёт «COALESCE(NULL, NULL, 5, 7)»?
  2. Тест 2 — В столбце значения 10, NULL, 20. Что вернёт AVG по этому столбцу?
  3. Задача 1 — Сколько рейсов ещё не вылетело
  4. Задача 2 — Номер посадочного или 0
  5. Задача 3 — Заполненность посадочных номеров
  6. Задача 4 — Доля прибывших по статусам

Задачи решаются прямо здесь, в браузере, на учебной базе — нужна только бесплатная регистрация, чтобы сохранялись ответы и прогресс.

Зарегистрироваться и решитьВойти
CASE: условия внутри запросаСледующий урок: Даты и время