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