Ответ
Оба оператора используются для объединения таблиц, но они по-разному определяют, какая из таблиц является "главной" и чьи строки всегда должны присутствовать в результате.
LEFT JOIN (Левое соединение)
Возвращает все строки из левой таблицы (FROM
table) и соответствующие им строки из правой таблицы (JOIN
table). Если для строки из левой таблицы не найдено соответствия в правой, то столбцы правой таблицы будут заполнены значениями NULL
.
Простыми словами: "Берём всё из левой таблицы и добавляем совпадения из правой".
-- Получить всех пользователей и их заказы, если они есть.
-- Все пользователи будут в результате, даже те, у кого нет заказов.
SELECT users.name, orders.id
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
RIGHT JOIN (Правое соединение)
Работает зеркально. Возвращает все строки из правой таблицы и соответствующие им строки из левой. Если для строки из правой таблицы не найдено соответствия в левой, столбцы левой таблицы будут NULL
.
Простыми словами: "Берём всё из правой таблицы и добавляем совпадения из левой".
-- Получить все заказы и информацию о пользователях, которые их сделали.
-- Все заказы будут в результате, даже те, у которых по какой-то причине нет пользователя.
SELECT users.name, orders.id
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;
Ключевой момент и лучшая практика
Любой RIGHT JOIN
можно переписать как LEFT JOIN
, просто поменяв таблицы местами. На практике LEFT JOIN
используется гораздо чаще, так как это делает SQL-запросы более читаемыми и логичными (мы идём от главной сущности к зависимой).
RIGHT JOIN
может быть полезен в редких случаях при работе со сложными запросами или представлениями, которые вы не можете изменить.