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;  -- Результат: NULL (UNKNOWN)

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

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

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

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

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 возвращает NULL (UNKNOWN), а WHERE отфильтровывает все строки, для которых условие не является явным TRUE. Для проверки на 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 лекция
Недоступна
Подсчёт клиентов по регионам с фильтрацией
Подсчёт клиентов по регионам с фильтрацией
Комментарии (12)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Николай Уровень 16
5 августа 2026
Я бы добавил ещё один абзац. Из неравенств также можно сделать заключение, что при фильтрации where [название поля] != '' ('' - это пустое текстовое поле),у нас также уберутся и NULL, соответственно мы получим только заполненные текстовые поля без нуллов. Потому что select NULL = ''; -- null
Кристина Уровень 28
23 июля 2026
😁
Gans Electro Уровень 42
14 июня 2026
Интересные студенты 2000 и 1995 года рождения)
Euraks Уровень 58
5 июня 2026
код с ошибками, например указываю несуществующий столбец - компиляция успешна - код выполняется хорошо хоть, валидацию не проходит
Дмитрий Веремеенко Уровень 42 Expert
25 января 2026
SELECT NULL = NULL; -- результат NULL !!! ... SELECT NULL = 0; результат NULL !!! SELECT NULL <> 0; результат NULL !!! Исправьте пожалуйста данные в лекции!!!, Тест в следующем разделе, тоже по причине этой опечатки не проходит!!!
Dmitry Ivanchenko Уровень 18
13 января 2026
Задачи никак не связаны с темой
Анжелика Уровень 33
24 августа 2025
Здесь должно быть все NULL SELECT NULL + 1; -- Результат: NULL SELECT NULL * 100; -- Результат: NULL SELECT NULL = 0; -- Результат: FALSE SELECT NULL <> 0; -- Результат: FALSE
Anemon Уровень 13 Expert
20 августа 2025
🤓
Евгений Уровень 61 Expert
22 июля 2025
Во второй задаче криво сформулированы условия, не указано, что требуется также вывести кол-во клиентов.
Андрей Глушков Уровень 1
20 июля 2025
Добрый день! Объясните мне пож-ста, почему в запросе >=4, а в ответ выходит 3.5 и ответ засчитан??
Евгений Уровень 61 Expert
22 июля 2025
Косяк их среды. Протестировал локально, и вывод такой, какой должен быть:

Laptop,4.5