Объясните разницу между LEFT JOIN и RIGHT JOIN в SQL.

Ответ

Оба оператора используются для объединения таблиц, но они по-разному определяют, какая из таблиц является "главной" и чьи строки всегда должны присутствовать в результате.

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 может быть полезен в редких случаях при работе со сложными запросами или представлениями, которые вы не можете изменить.