Работа с 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 также учитывается по разному 🤓

👍 если пост полезен```

repost

46

input message

напишите коммент

еще контент автора

еще контент автора

войдите, чтобы увидеть

и подписаться на интересных профи

в приложении больше возможностей

пока в веб-версии есть не всё — мы вовсю работаем над ней

сетка — cоциальная сеть для нетворкинга от hh.ru

пересекайтесь с теми, кто повлияет на ваш профессиональный путь