SQL Academy · Урок

IS NULL, IS NOT NULL и COALESCE

Обнаруживайте NULL с помощью IS NULL, заменяйте его функциями COALESCE / NULLIF и создавайте запросы, которые корректно работают с отсутствующими данными

Урок 4 из 413 шагов

«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, always

COALESCE: первое значение, отличное от 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 — локальная установка не требуется.

Все уроки этого курса

  1. Шаблоны LIKE и подстановочные символы
  2. IN и NOT IN для множеств
  3. BETWEEN для диапазонов
  4. IS NULL, IS NOT NULL и COALESCE
← Назад к SQL Academy