Мини-гайд по JOIN-ам в SQL

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
9,621
Реакции
1,555
Credits
33,871
Мини-гайд по JOIN-ам в SQL
JOIN — мощнейший инструмент в арсенале SQL. Но многие путаются в типах. Разбираем на пальцах:

INNER JOIN
Что делает: оставляет только совпадающие строки из обеих таблиц.
Когда использовать: когда нужны только те записи, у которых есть соответствие.
SQL:
SELECT *
FROM orders o
INNER JOIN customers c ON o.customer_id = c.id;
Best practice: это дефолтный выбор. Работает быстрее, т.к. отбрасывает всё "лишнее".

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;
Подходит для reconciliation'а или сверки.

Совет
Фильтры (WHERE) после LEFT JOIN могут не дать ожидаемый результат.
Используй ON для условий соединения, WHERE — для фильтрации результата.