Как работать с NULL в SQL?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Нужно показать, что NULL — это не значение, а отсутствие значения, и с ним нельзя работать как с обычными данными. Важно знать, что сравнение через = и <> для NULL не работает, поэтому используются IS NULL и IS NOT NULL. Также полезно упомянуть COALESCE, CASE и особенности JOIN/агрегаций.
Определение:
NULL в SQL означает неизвестное, отсутствующее или неприменимое значение. Это не ноль и не пустая строка, а специальный маркер "нет данных". Из-за этого NULL требует отдельной логики в фильтрации, сравнениях, сортировках и вычислениях.
Пример использования:
Допустим, в таблице users у части пользователей не указан email. Тогда нужно выбрать только тех, у кого email отсутствует, или подставить значение по умолчанию.
-- Пользователи без email
SELECT id, name
FROM users
WHERE email IS NULL;
-- Подставить значение по умолчанию
SELECT id, name, COALESCE(email, 'не указан') AS email
FROM users;
Пояснение кода:
В первом запросе используется IS NULL, потому что обычное сравнение email = NULL не даст ожидаемого результата. SQL не считает NULL равным чему-либо, даже другому NULL.
Во втором запросе COALESCE(email, 'не указан') возвращает первое не-NULL значение. Если email заполнен, он попадёт в результат, если нет — будет показана строка 'не указан'.
Если нужно обработать несколько вариантов, COALESCE проверяет их по порядку и берёт первый доступный.
Ключевые моменты:
NULL— это отсутствие значения, а не0и не пустая строка.- Для проверки используйте только
IS NULLиIS NOT NULL. - Сравнения с
=и<>дляNULLне работают как для обычных значений. - Для замены
NULLна значение по умолчанию часто используютCOALESCE. - В агрегатах
COUNT(column)обычно не считаетNULL, аCOUNT(*)считает строки целиком. - В
JOINи условиях фильтрацииNULLможет давать неожиданные результаты, поэтому логику нужно проверять отдельно.