Ответ
В SQL стандартом определены следующие основные типы JOIN для соединения таблиц:
-
INNER JOIN — возвращает только строки, для которых есть совпадение в обеих таблицах.
SELECT * FROM orders INNER JOIN customers ON orders.customer_id = customers.id; -
LEFT (OUTER) JOIN — возвращает все строки из левой таблицы и совпадающие строки из правой. При отсутствии совпадения поля правой таблицы будут
NULL.SELECT * FROM employees e LEFT JOIN departments d ON e.department_id = d.id; -
RIGHT (OUTER) JOIN — противоположность LEFT JOIN. Возвращает все строки из правой таблицы.
-
FULL (OUTER) JOIN — возвращает все строки, когда есть совпадение в левой ИЛИ правой таблице. Результат объединяет LEFT и RIGHT JOIN.
-
CROSS JOIN — возвращает декартово произведение строк обеих таблиц (все возможные комбинации).
-
SELF JOIN — соединение таблицы с самой собой, часто используется для иерархических данных.
SELECT e1.name, e2.name AS manager_name FROM employees e1 LEFT JOIN employees e2 ON e1.manager_id = e2.id;
Ключевое отличие между INNER и OUTER JOIN — в том, включаются ли в результат строки без совпадений. Выбор типа JOIN зависит от бизнес-логики запроса: нужны ли вам только связанные данные (INNER) или все записи из одной из таблиц, даже без связей (OUTER).