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).
| A | B | A AND B | A OR B |
|---|---|---|---|
| TRUE | NULL | NULL | TRUE |
| FALSE | NULL | FALSE | NULL |
| NULL | NULL | NULL | NULL |
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 — локальная установка не требуется.
Все уроки этого курса
- Что такое RDBMS и почему важны таблицы
- Первичные ключи и уникальность
- NULL: третье логическое значение
- Обзор типов данных: INT VARCHAR DATE BOOLEAN