Что такое NULL в SQL и как проверить пустую ячейку?
У некоторых строк в столбце вместо значения написано NULL. Это что, ноль или пустая строка? И почему WHERE age = NULL ничего не находит, хотя пустые ячейки точно есть? Запутался.
2 ответа
NULL — это «нет значения», пустая, незаполненная ячейка. Важно: это НЕ ноль и НЕ пустая строка ''. Это «мы не знаем / не указано».
Например, у нового ученика ещё не записали возраст — там будет NULL.
Теперь про твою ошибку. С NULL нельзя сравнивать через =, потому что «неизвестно = неизвестно» — это не «истина», это тоже неизвестность. Поэтому WHERE age = NULL не сработает.
Правильно — через IS NULL / IS NOT NULL:
-- у кого возраст не указан
SELECT * FROM students WHERE age IS NULL;
-- у кого возраст указан
SELECT * FROM students WHERE age IS NOT NULL;
Запомни правило: для NULL — только IS NULL / IS NOT NULL, а не = и <>.
Лайфхак для понимания: считай, что NULL — это «знак вопроса». 5 > ? — непонятно, истина это или нет. Поэтому любые сравнения с NULL дают не «да» и не «нет», а «неизвестно», и строка просто не попадает в результат.