52

В чем разница между "INNER JOIN" и "OUTER JOIN"?

12

Какова роль операторов LEFT OUTER JOIN, RIGHT OUTER JOIN и FULL OUTER JOIN в запросах SQL и как они соотносятся друг с другом?

5 ответ(ов)

1

В простых словах:

Внутреннее соединение (inner join) возвращает только те строки, которые совпадают в обеих таблицах.

В то время как внешнее соединение (outer join) возвращает совпадающие строки из одной таблицы и все строки из другой таблицы. Результат зависит от типа внешнего соединения:

  • Левое соединение (left join): совпадающие строки из правой таблицы и все строки из левой таблицы.
  • Правое соединение (right join): совпадающие строки из левой таблицы и все строки из правой таблицы.
  • Полное соединение (full join): все строки из обеих таблиц, независимо от наличия совпадений.
1

INNER JOIN отображает только те строки, для которых есть соответствующие записи с правой стороны соединения.

LEFT OUTER JOIN, в свою очередь, показывает все строки из левой таблицы, даже если для них нет соответствующих строк с правой стороны. В случае отсутствия соответствующей строки, колонки с правой стороны будут отображать значения NULL.

1

Inner join требует, чтобы запись с связанным идентификатором существовала в присоединенной таблице.

В то время как outer join вернет записи с левой стороны, даже если для правой стороны ничего не существует.

Например, у вас есть таблицы Orders и OrderDetails, которые связаны по полю OrderID.

Orders

  • OrderID
  • CustomerName

OrderDetails

  • OrderDetailID
  • OrderID
  • ProductName
  • Qty
  • Price

Запрос

SELECT Orders.OrderID, Orders.CustomerName
  FROM Orders 
 INNER JOIN OrderDetails
    ON Orders.OrderID = OrderDetails.OrderID

вернет только те заказы, которые также имеют соответствующие записи в таблице OrderDetails.

Если вы измените его на OUTER LEFT JOIN:

SELECT Orders.OrderID, Orders.CustomerName
  FROM Orders 
  LEFT JOIN OrderDetails
    ON Orders.OrderID = OrderDetails.OrderID

то вы получите записи из таблицы Orders, даже если для них нет соответствующих записей в таблице OrderDetails.

Это можно использовать для поиска заказов, у которых отсутствуют записи в OrderDetails, что может указывать на возможный "сиротский" заказ, добавив условие в WHERE, например: WHERE OrderDetails.OrderID IS NULL.

0

INNER JOIN требует, чтобы в сравнении двух таблиц была хотя бы одна совпадающая запись. Например, если у нас есть таблицы A и B, то это можно представить как A ∩ B (пересечение A и B).

LEFT OUTER JOIN и LEFT JOIN — это одно и то же. Этот тип соединения возвращает все записи, соответствующие в обеих таблицах, а также все записи из левой таблицы, даже если для них нет соответствий в правой.

Аналогично, RIGHT OUTER JOIN и RIGHT JOIN также являются эквивалентными. Они возвращают все записи, соответствующие в обеих таблицах, а также все записи из правой таблицы, даже если для них нет соответствий в левой.

FULL JOIN представляет собой комбинацию LEFT OUTER JOIN и RIGHT OUTER JOIN без дублирования записей.

0

Вы используете INNER JOIN, чтобы вернуть все строки из обеих таблиц, где есть совпадение. То есть в результирующей таблице все строки и столбцы будут содержать значения.

В OUTER JOIN результирующая таблица может содержать пустые столбцы. Внешнее соединение может быть либо LEFT, либо RIGHT.

LEFT OUTER JOIN возвращает все строки из первой таблицы, даже если вторая таблица не содержит совпадений.

RIGHT OUTER JOIN возвращает все строки из второй таблицы, даже если первая таблица не содержит совпадений.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь