В чем разница между LEFT JOIN и RIGHT JOIN в SQL?

«В чем разница между LEFT JOIN и RIGHT JOIN в SQL?» — вопрос из категории Базы данных, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

LEFT JOIN и RIGHT JOIN — это типы внешних соединений (OUTER JOIN), которые определяют, какие строки из соединяемых таблиц будут включены в результирующий набор, даже если для них нет совпадений.

LEFT JOIN

Возвращает все строки из левой (первой) таблицы и только совпадающие строки из правой таблицы. Если совпадения нет, поля из правой таблицы заполняются NULL.

-- Найти всех клиентов и их заказы (включая клиентов без заказов)
SELECT c.CustomerName, o.OrderId, o.OrderDate
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;

RIGHT JOIN

Возвращает все строки из правой (второй) таблицы и только совпадающие строки из левой таблицы. Если совпадения нет, поля из левой таблицы заполняются NULL.

-- Найти все заказы и информацию о клиентах (включая заказы без привязанного клиента)
SELECT c.CustomerName, o.OrderId, o.OrderDate
FROM Customers c
RIGHT JOIN Orders o ON c.CustomerID = o.CustomerID;

Ключевое отличие и практика

  • LEFT JOIN используется гораздо чаще, так как запросы обычно строятся от основной сущности (например, от клиентов к их заказам).
  • Любой RIGHT JOIN можно переписать как LEFT JOIN, просто поменяв таблицы местами. Поэтому RIGHT JOIN встречается редко — для единообразия кода предпочитают использовать только LEFT JOIN.
  • INNER JOIN (внутреннее соединение) возвращает только строки, где есть совпадение в обеих таблицах, в отличие от внешних соединений.