IS NULL, IS NOT NULL и COALESCE
Обнаруживайте NULL с помощью IS NULL, заменяйте его функциями COALESCE / NULLIF и создавайте запросы, которые корректно работают с отсутствующими данными
«IS NULL, IS NOT NULL и COALESCE» — бесплатный урок SQL Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Проверка на NULL
Используйте IS NULL и IS NOT NULL — никогда не используйте = NULL:
SELECT * FROM users WHERE deleted_at IS NULL;
SELECT * FROM users WHERE deleted_at IS NOT NULL;Почему = NULL незаметно даёт сбой
Сравнение любого значения с NULL даёт NULL (неизвестно). Строка отбрасывается, но ошибка не возникает, поэтому дефект попадает в рабочую версию:
SELECT * FROM users WHERE deleted_at = NULL;
-- → returns 0 rows, alwaysCOALESCE: первое значение, отличное от NULL
COALESCE принимает любое количество аргументов и возвращает первое значение, которое не равно NULL:
SELECT id,
COALESCE(nickname, full_name, email, 'Anonymous') AS display_name
FROM users;COALESCE в WHERE
Используйте COALESCE, чтобы заменить NULL значением по умолчанию, пригодным для сортировки и сравнения:
-- Treat NULL last_login_at as the epoch:
SELECT * FROM users
ORDER BY COALESCE(last_login_at, '1970-01-01') DESC;NULLIF: обратная операция
NULLIF(a, b) возвращает NULL, если a = b, а в противном случае — a:
-- Treat 0 as missing so AVG ignores it:
SELECT AVG(NULLIF(price, 0)) FROM products;
-- Convert empty string to NULL on insert:
INSERT INTO contacts (phone) VALUES (NULLIF(:phone, ''));CASE для условных значений по умолчанию
CASE — универсальная альтернатива, когда COALESCE недостаточно гибок:
SELECT id,
CASE
WHEN status IS NULL OR status = '' THEN 'unknown'
WHEN status = 'A' THEN 'active'
ELSE status
END AS status_label
FROM users;NULL в CHECK и ограничениях
Ограничение CHECK проходит проверку, когда условие равно NULL. Явно укажите запрет NULL, если он Вам необходим:
CREATE TABLE prices (
amount NUMERIC(10,2),
CHECK (amount > 0) -- amount = NULL passes!
);
-- Better:
CREATE TABLE prices2 (
amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);NULL в JOIN ON
Пары строк, в которых ключ соединения равен NULL, никогда не совпадают: NULL = NULL даёт NULL. Используйте IS NOT DISTINCT FROM, если хотите считать NULL равным NULL:
SELECT * FROM a JOIN b ON a.key IS NOT DISTINCT FROM b.key;NULL и UNIQUE
Согласно стандарту SQL, NULL считаются различными в ограничениях UNIQUE — можно иметь несколько строк с NULL:
CREATE TABLE invites (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE
);
INSERT INTO invites (email) VALUES (NULL), (NULL); -- both succeed!Итоги: NULL и агрегатные функции
Агрегатные функции, кроме COUNT(*), пропускают NULL.
SELECT COUNT(*) FROM users; -- all rows
SELECT COUNT(email) FROM users; -- rows where email IS NOT NULL
SELECT COUNT(DISTINCT id) FROM users;Всегда объявляйте NOT NULL, когда это возможно
NOT NULL — самая простая и надёжная гарантия корректности. Добавляйте его в каждый столбец, который никогда не должен быть пустым.
Итоги
Работа с NULL — главный источник трудноуловимых ошибок SQL.
- Проверяйте с помощью
IS NULL - Заменяйте с помощью
COALESCE - Преобразуйте маркерное значение в NULL с помощью
NULLIF - По умолчанию используйте
NOT NULL
Быстрая проверка
Какое выражение возвращает email, если он не равен NULL, и литерал 'no-email' в противном случае?
Изучай SQL с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 46
- Уроки
- 183
Часто задаваемые вопросы
Урок «IS NULL, IS NOT NULL и COALESCE» бесплатный?
Да — полный текст урока «IS NULL, IS NOT NULL и COALESCE» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «IS NULL, IS NOT NULL и COALESCE»?
Обнаруживайте NULL с помощью IS NULL, заменяйте его функциями COALESCE / NULLIF и создавайте запросы, которые корректно работают с отсутствующими данными Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «IS NULL, IS NOT NULL и COALESCE»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Шаблоны LIKE и подстановочные символы
- IN и NOT IN для множеств
- BETWEEN для диапазонов
- IS NULL, IS NOT NULL и COALESCE