Пришло время подробнее поговорить о 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 в следующих лекциях.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ