JavaRush /Курсы /SQL SELF /Знакомство с NULL. Отличие NULL от 0

Знакомство с NULL. Отличие NULL от 0

SQL SELF
9 уровень , 0 лекция
Открыта

Пришло время подробнее поговорить о NULL. И это вовсе не пустой разговор, пусть наш герой и выглядит... никак. Если бы таблица была домом, NULL был бы его призраком — молчаливым, загадочным и непредсказуемым. Он вроде бы присутствует, но на вопросы не отвечает, в подсчётах не участвует, сравнения избегает. Это не просто "пусто" — это "ничего не известно".

В мире SQL NULL — не ноль, не пустая строка и не "нет данных" в привычном смысле. Это особый знак неизвестности, с которым нужно обращаться осторожно. Сегодня разберёмся, почему NULL — не просто странный гость, а важный участник любой базы данных. Ведь он буквально означает "значение неизвестно или не определено".

Чем NULL отличается от пустой строки или числа 0?

Многие новички путают NULL с другими значениями, такими как пустая строка '' или число 0. Давайте разберем ключевые различия:

Понятие Значение
NULL Полное отсутствие значения. Это не просто пустая коробка, это отсутствие коробки
Пустая строка Это строка, у которой просто нет символов. Например: ''
Число 0 Значение, представляющее конкретное число, равное нулю

Пример из реальной жизни: представьте, что у вас есть таблица сотрудников, и вы храните их зарплаты. Если зарплата указана как 0, значит, человеку ничего не заплатили. Если же зарплата указана как NULL, то вы просто не знаете, сколько ему платят (или это еще не определено).

Как интерпретировать NULL

Теперь, когда мы уже немножко знаем, что такое NULL, давайте посмотрим, как с ним работает SQL. Самое важное о NULL можно передать одной фразой: NULL ничему не равен и ничему не неравен, даже самому себе.

SELECT NULL = NULL;  -- Результат: FALSE

Сюрприз! Почему так? Потому что NULL — это неизвестность. Если у вас есть два неизвестных значения, вы не можете утверждать, что они равны, равно как и то, что они не равны.

Давайте разберем несколько примеров:

Примеры операций с NULL

SELECT NULL + 1;      -- Результат: NULL
SELECT NULL * 100;    -- Результат: NULL
SELECT NULL = 0;      -- Результат: FALSE
SELECT NULL <> 0;     -- Результат: FALSE

NULL при сложении, умножении или любом другом вычислении всегда возвращает NULL. Тут NULL работает не совсем так, как 0 в математике. Мы как будто бросаем что-то в пустоту и эта пустота всё поглощает.

Практические примеры

Представим таблицу students с информацией о студентах:

id name birth_date grade
1 Alice 2000-01-01 85
2 Bob NULL 90
3 Charlie 1999-05-22 NULL
4 Diana NULL NULL

Пример 1: Влияние NULL в условиях

Если мы попытаемся найти всех студентов без даты рождения, поставив условие WHERE birth_date = NULL:

SELECT *
FROM students 
WHERE birth_date = NULL;

Мы не получим никаких результатов, потому что NULL = NULL возвращает FALSE. Для проверки на NULL необходимо использовать IS NULL:

SELECT * FROM students WHERE birth_date IS NULL;

Результат:

id name birth_date grade
2 Bob NULL 90
4 Diana NULL NULL

Пример 2: Влияние NULL в вычислениях

id name birth_date grade
1 Alice 2000-01-01 85
2 Bob NULL 90
3 Charlie 1999-05-22 NULL
4 Diana NULL NULL

Если мы попытаемся вычислить среднюю оценку для всех студентов:

SELECT AVG(grade) FROM students;

Результат будет: 87.5. Почему? Потому что NULL игнорируется в агрегатных функциях, таких как AVG, SUM, MIN, MAX. Но будьте осторожны! Если вам нужно учитывать строки с NULL, это потребует дополнительных манипуляций.

Более подробно мы изучим работу с NULL в следующих лекциях.

2
Задача
SQL SELF, 9 уровень, 0 лекция
Недоступна
Использование HAVING для фильтрации среднего рейтинга
Использование HAVING для фильтрации среднего рейтинга
2
Задача
SQL SELF, 9 уровень, 0 лекция
Недоступна
Подсчёт клиентов по регионам с фильтрацией
Подсчёт клиентов по регионам с фильтрацией
Комментарии (8)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Дмитрий Веремеенко Уровень 42 Expert
25 января 2026
SELECT NULL = NULL; -- результат NULL !!! ... SELECT NULL = 0; результат NULL !!! SELECT NULL <> 0; результат NULL !!! Исправьте пожалуйста данные в лекции!!!, Тест в следующем разделе, тоже по причине этой опечатки не проходит!!!
Dmitry Ivanchenko Уровень 18
13 января 2026
Задачи никак не связаны с темой
Анжелика Уровень 31
24 августа 2025
Здесь должно быть все NULL SELECT NULL + 1; -- Результат: NULL SELECT NULL * 100; -- Результат: NULL SELECT NULL = 0; -- Результат: FALSE SELECT NULL <> 0; -- Результат: FALSE
Anemon Уровень 13 Expert
20 августа 2025
🤓
Евгений Уровень 49 Expert
22 июля 2025
Во второй задаче криво сформулированы условия, не указано, что требуется также вывести кол-во клиентов.
Андрей Глушков Уровень 13
20 июля 2025
Добрый день! Объясните мне пож-ста, почему в запросе >=4, а в ответ выходит 3.5 и ответ засчитан??
Евгений Уровень 49 Expert
22 июля 2025
Косяк их среды. Протестировал локально, и вывод такой, какой должен быть:

Laptop,4.5
Alexandr Уровень 20
2 июля 2025
SELECT product, AVG(rating) AS avg_rating -- в принципе понятно но все же можно было в заданиях обойтись и без AS FROM reviews -- Просто местами эти ярлыки с AS больше путают.