Ответ
Эти операции объединения (JOIN) определяют, какие строки из соединяемых таблиц попадут в результирующий набор.
Типы JOIN (на примере таблиц Customers и Orders)
-
INNER JOIN
- Возвращает только те записи, для которых условие соединения (
ON) выполняется в обеих таблицах. - Записи без соответствия отбрасываются.
-- Только клиенты, у которых есть заказы SELECT * FROM Customers c INNER JOIN Orders o ON c.id = o.customer_id;
- Возвращает только те записи, для которых условие соединения (
-
LEFT (OUTER) JOIN
- Возвращает ВСЕ записи из левой таблицы (
Customers). - Для записей, у которых нет соответствия в правой таблице, поля из правой таблицы будут
NULL.-- Все клиенты, даже если у них нет заказов SELECT * FROM Customers c LEFT JOIN Orders o ON c.id = o.customer_id;
- Возвращает ВСЕ записи из левой таблицы (
-
RIGHT (OUTER) JOIN
- Возвращает ВСЕ записи из правой таблицы (
Orders). - Для записей, у которых нет соответствия в левой таблице, поля из левой таблицы будут
NULL. - На практике используется реже, так как его всегда можно заменить на
LEFT JOIN, поменяв таблицы местами.-- Все заказы, даже если для них нет записи о клиенте (аналог LEFT JOIN с переставленными таблицами) SELECT * FROM Customers c RIGHT JOIN Orders o ON c.id = o.customer_id;
- Возвращает ВСЕ записи из правой таблицы (
Визуализация
Часто используется мнемоника на основе диаграмм Венна или следующее правило:
- INNER JOIN = пересечение множеств.
- LEFT JOIN = всё левое множество + пересечение.
- RIGHT JOIN = всё правое множество + пересечение.