🟡🔵 Разбираемся с SQL JOIN и фильтрами в OUTER JOIN
Одна из самых частых ошибок при работе с SQL - путаница между условием в
Когда мы пишем
✨ Пример:
У нас есть две таблицы:
- Левая: фигура + число
- Правая: число + фигура
Мы делаем
1. Фильтр в ON
Если написать
2. Фильтр в WHERE
Если написать
⚡ Почему это нужно знать?
-
-
- В
📌 Вывод:
- Если нужно оставить все строки из левой таблицы и лишь добавить совпадения справа - фильтр ставим в
- Если хотим действительно отобрать только подходящие строки — фильтр в
Именно поэтому в сложных запросах всегда спрашивай себя: фильтр — это часть логики соединения или это окончательное ограничение?
#SQL #joins #databases
Одна из самых частых ошибок при работе с 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
❤9👍9🔥5