0Pricing
SQL Academy · Урок

NULL: третье логическое значение

Освойте значение NULL, узнайте, почему NULL не равен ничему, даже самому себе, и как трёхзначная логика влияет на предложения WHERE

«NULL: третье логическое значение» — бесплатный урок SQL Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Что такое NULL

NULL обозначает неизвестные или отсутствующие данные. Это не ноль, не пустая строка и не false. Это явное отсутствие значения.

NULL не равно ничему (даже самому себе)

Это правило часто сбивает всех с толку:

SELECT NULL = NULL;       -- NULL (not true!)
SELECT NULL = 0;          -- NULL
SELECT NULL = '';        -- NULL
SELECT NULL <> 1;         -- NULL

Используйте IS NULL и IS NOT NULL

Для проверки NULL необходимо использовать специальные предикаты IS NULL и IS NOT NULL:

SELECT email FROM users WHERE deleted_at IS NULL;       -- active users
SELECT email FROM users WHERE deleted_at IS NOT NULL;   -- deleted users

Трёхзначная логика

Логика BOOLEAN в SQL имеет три значения: TRUE, FALSE и UNKNOWN (NULL).

ABA AND BA OR B
TRUENULLNULLTRUE
FALSENULLFALSENULL
NULLNULLNULLNULL

WHERE удаляет строки, если предикат имеет значение NULL

Если выражение WHERE x = 5 даёт для строки значение NULL (поскольку x имеет значение NULL), эта строка НЕ возвращается. Сохраняются только строки, для которых предикат имеет значение TRUE.

-- Suppose age is NULL for some users:
SELECT * FROM users WHERE age >= 18;
-- Users with NULL age are NOT returned, even though we
-- don't actually know they're under 18.

Ловушка NULL в NOT IN

Этот запрос возвращает ZERO строк, если какое-либо имя во вложенном запросе имеет значение NULL:

SELECT * FROM users
WHERE name NOT IN (SELECT excluded_name FROM blocklist);
-- If blocklist has a NULL row, the whole NOT IN evaluates to NULL
-- → no rows returned

-- Safer:
SELECT * FROM users u
WHERE NOT EXISTS (
  SELECT 1 FROM blocklist b WHERE b.excluded_name = u.name
);

COALESCE: замена NULL значением по умолчанию

COALESCE возвращает первый аргумент, отличный от NULL:

SELECT id, COALESCE(full_name, email, 'Anonymous') AS display_name
FROM users;

-- If full_name is NULL, use email; if that's NULL too, use 'Anonymous'.

NULLIF: обратная операция

NULLIF(a, b) возвращает NULL, когда a = b, а в противном случае — a. Это удобно для обработки специальных значений, таких как '' или 0, как NULL.

SELECT NULLIF(price, 0) FROM products;
-- Returns NULL when price is 0, useful for AVG() that should ignore zeros.

NULL в агрегатных функциях

Агрегатные функции (кроме COUNT(*)) пропускают входные значения NULL:

-- Suppose:  prices = [10, 20, NULL, 30]
SELECT COUNT(*)     FROM products;  -- 4 (counts rows)
SELECT COUNT(price) FROM products;  -- 3 (counts non-NULL prices)
SELECT AVG(price)   FROM products;  -- 20  (60 / 3, not 60 / 4)
SELECT SUM(price)   FROM products;  -- 60

Сортировка значений NULL

По умолчанию PostgreSQL помещает NULL в конец при сортировке по возрастанию и в начало при сортировке по убыванию. Это можно изменить:

SELECT * FROM users ORDER BY last_login_at DESC NULLS LAST;

Хранение NULL и пустой строки

Для каждого столбца решите: является ли '' допустимым значением? Если нет, используйте NULL в значении «нет значения». Если да, NULL означает нечто другое (например, «ещё не спрашивали»).

Будьте последовательны — не смешивайте оба варианта в одном столбце.

Повторение

NULL — самостоятельное логическое значение.

  • Проверяйте его с помощью IS NULL, а не = NULL
  • Фильтры WHERE оставляют только строки со значением TRUE
  • Агрегатные функции пропускают входные значения NULL
  • COALESCE — Ваш помощник

Быстрая проверка

Что возвращает SELECT NULL = NULL;?

Часто задаваемые вопросы

Урок «NULL: третье логическое значение» бесплатный?

Да — полный текст урока «NULL: третье логическое значение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «NULL: третье логическое значение»?

Освойте значение NULL, узнайте, почему NULL не равен ничему, даже самому себе, и как трёхзначная логика влияет на предложения WHERE Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «NULL: третье логическое значение»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Что такое RDBMS и почему важны таблицы
  2. Первичные ключи и уникальность
  3. NULL: третье логическое значение
  4. Обзор типов данных: INT VARCHAR DATE BOOLEAN
← Назад к SQL Academy