Короткий ответ
RIGHT JOIN сохраняет все строки правой таблицы (а не левой, как при LEFT JOIN), заполняя NULL для несовпавших строк левой таблицы; на практике его используют реже, потому что тот же результат проще получить, переставив таблицы местами и используя привычный LEFT JOIN.
Как это работает подробнее
A RIGHT JOIN B ON ... логически эквивалентен B LEFT JOIN A ON ... с тем же условием — просто меняются «главная» и «подчинённая» таблицы в соединении.
Пример кода
Запрос SQL
-- Эквивалентные запросы
SELECT * FROM orders o RIGHT JOIN customers c ON o.customer_id = c.customer_id;
SELECT * FROM customers c LEFT JOIN orders o ON o.customer_id = c.customer_id;Что использовать на практике
- На практике: большинство аналитиков договариваются о стиле, где «главная» таблица (та, чьи строки точно нужно сохранить) всегда пишется первой с
LEFT JOIN— это облегчает чтение сложных запросов с несколькими соединениями, потому что не нужно удерживать в голове направлениеRIGHT JOIN. - Результат: Оба запроса вернут одинаковый набор строк (возможно, в разном порядке столбцов).
- Проверка: сравнить количество строк и набор значений
customer_idв обоих результатах — они должны совпадать.
Подводные камни
- Частая ошибка: в запросах с несколькими соединениями смешивают
LEFTиRIGHT JOIN, из-за чего становится трудно понять, какая строка в итоге должна быть «обязательно сохранена», и легко случайно потерять нужные строки при добавлении нового условия.