Мини-гайд по JOIN-ам в SQL
JOIN — мощнейший инструмент в арсенале SQL. Но многие путаются в типах. Разбираем на пальцах:
INNER JOIN
Что делает: оставляет только совпадающие строки из обеих таблиц.
Когда использовать: когда нужны только те записи, у которых есть соответствие.
Best practice: это дефолтный выбор. Работает быстрее, т.к. отбрасывает всё "лишнее".
LEFT JOIN
Что делает: возвращает все строки из левой таблицы и NULL из правой, если нет совпадения.
Когда использовать: когда нужно сохранить всё из первой таблицы, даже если во второй нет данных.
Часто используется для аналитики: "у каких клиентов не было заказов?"
RIGHT JOIN
Что делает: наоборот — всё из правой таблицы и NULL из левой, если нет совпадения.
Когда использовать: аналогично LEFT JOIN, но редко встречается, потому что просто меняем порядок таблиц.
FULL OUTER JOIN
Что делает: объединяет LEFT и RIGHT — берёт всё из обеих таблиц.
Когда использовать: когда важны все данные, даже без соответствий.
Подходит для reconciliation'а или сверки.
Совет
Фильтры (WHERE) после LEFT JOIN могут не дать ожидаемый результат.
Используй ON для условий соединения, WHERE — для фильтрации результата.
JOIN — мощнейший инструмент в арсенале SQL. Но многие путаются в типах. Разбираем на пальцах:
INNER JOIN
Что делает: оставляет только совпадающие строки из обеих таблиц.
Когда использовать: когда нужны только те записи, у которых есть соответствие.
SQL:
SELECT *
FROM orders o
INNER JOIN customers c ON o.customer_id = c.id;
LEFT JOIN
Что делает: возвращает все строки из левой таблицы и NULL из правой, если нет совпадения.
Когда использовать: когда нужно сохранить всё из первой таблицы, даже если во второй нет данных.
SQL:
SELECT *
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;
RIGHT JOIN
Что делает: наоборот — всё из правой таблицы и NULL из левой, если нет совпадения.
Когда использовать: аналогично LEFT JOIN, но редко встречается, потому что просто меняем порядок таблиц.
FULL OUTER JOIN
Что делает: объединяет LEFT и RIGHT — берёт всё из обеих таблиц.
Когда использовать: когда важны все данные, даже без соответствий.
SQL:
SELECT *
FROM table_a
FULL OUTER JOIN table_b ON table_a.id = table_b.id;
Совет
Фильтры (WHERE) после LEFT JOIN могут не дать ожидаемый результат.
Используй ON для условий соединения, WHERE — для фильтрации результата.