tgoop.com/sqlhub/2062
Last Update:
🟡🔵 Разбираемся с SQL JOIN и фильтрами в OUTER JOIN
Одна из самых частых ошибок при работе с SQL - путаница между условием в ON
и фильтром в WHERE
. На картинке это отлично показано.
Когда мы пишем LEFT OUTER JOIN
, мы ожидаем, что слева попадут все строки. Но результат зависит от того, где именно мы накладываем фильтры.
✨ Пример:
У нас есть две таблицы:
- Левая: фигура + число
- Правая: число + фигура
Мы делаем LEFT OUTER JOIN
.
1. Фильтр в ON
Если написать ON right_table.number = 1
, то соединение будет проверять условие именно во время джойна. Это значит: строки слева сохранятся, даже если справа нет совпадений — просто будут NULL
.
2. Фильтр в WHERE
Если написать WHERE left_table.number = 1
, то фильтрация произойдёт уже после объединения. В этом случае строки, не прошедшие условие, полностью исчезнут из результата.
⚡ Почему это нужно знать?
- ON
управляет логикой соединения.
- WHERE
убирает строки после соединения.
- В OUTER JOIN
это принципиальная разница: при фильтре в ON
мы сохраним «пустые» строки, при фильтре в WHERE
они будут удалены.
📌 Вывод:
- Если нужно оставить все строки из левой таблицы и лишь добавить совпадения справа - фильтр ставим в ON
.
- Если хотим действительно отобрать только подходящие строки — фильтр в WHERE
.
Именно поэтому в сложных запросах всегда спрашивай себя: фильтр — это часть логики соединения или это окончательное ограничение?
#SQL #joins #databases
BY Data Science. SQL hub

Share with your friend now:
tgoop.com/sqlhub/2062