Работа с NULL значениями в SQL
Часто бывает такое, что вместо явного значения данных в таблице попадаются NULL - "пустые" значения. И когда стоит задача отфильтровать данные, то у неопытных аналитиков и инженеров могут возникать сложности с такими пустыми значениями.
Почему так происходит? В большинстве случаев фильтры пишутся с указанием явных значений в данных: конкретная строка/строки, число/числа, дата/даты
Например, найти заказы, в которых участвовали продукты с id 4, 7, 9
SELECT *
FROM orders
WHERE product_id IN (4,7,9)
Здесь все понятно. А если нужно наоборот исключить такие продукты из запроса?
SELECT *
FROM orders
WHERE product_id NOT IN (4,7,9)
Тоже вроде ок. НО если в таблице есть строки где product_id будет значением NULL, то такие строки не попадут ни в первый ни во второй запрос - а значит могут потеряться в аналитике совсем.
Помните про этот момент и не забывайте про конструкции IS NULL и IS NOT NULL - это фильтры, которые позволяют работать с пустыми значениями и не терять их в запросах.
Как еще можно работать с NULL: заменять их в явном виде на строку или любое нужное значение
Например, c помощью CASE `CASE WHEN product_id IS NULL THEN 'empty' ELSE product_id END AS product_id Тогда дальше с этими значениями можно работать через обычный синтаксис фильтраций, не боясь забыть про NULL
Классно расписано про NULL еще в этой статье
Ну и не забывайте про COUNT(*), COUNT(column), COUNT(DISTINCT column), где NULL также учитывается по разному 🤓
👍 если пост полезен```
еще контент автора
еще контент автора
войдите, чтобы увидеть
и подписаться на интересных профи