Поделиться через


Использование соединений

Условия соединения можно задать в предложении FROM или WHERE. Рекомендуется указывать их в предложении FROM. Предложения WHERE и HAVING могут также содержать условия поиска для дальнейшей фильтрации строк, выбранных этими условиями соединения.

Соединения можно разделить на следующие категории.

  • Внутренние соединения (типичные операции соединения, использующие такие операторы сравнения, как = или <>). Они включают эквивалентные соединения и естественные соединения.

    Внутренние соединения используют оператор сравнения для установки соответствия строк из двух таблиц на основе значений общих столбцов в каждой таблице. Примером может быть получение всех строк, в которых идентификационный номер студента одинаковый как в таблице students, так и в таблице courses.

  • Внешние соединения. Внешние соединения бывают левыми, правыми и полными.

    Если внешние соединения задаются в предложении FROM, они указываются с одним из следующих наборов ключевых слов.

    • LEFT JOIN или LEFT OUTER JOIN

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

    • RIGHT JOIN или RIGHT OUTER JOIN

      Правое внешнее соединение является обратным для левого внешнего соединения. Возвращаются все строки правой таблицы. Для левой таблицы возвращаются значения NULL каждый раз, когда строка правой таблицы не имеет совпадающей строки в левой таблице.

    • FULL JOIN или FULL OUTER JOIN

      Полное внешнее соединение возвращает все строки из правой и левой таблицы. Каждый раз, когда строка не имеет соответствия в другой таблице, столбцы списка выбора другой таблицы содержат значения NULL. Если между таблицами имеется соответствие, вся строка результирующего набора содержит значения данных из базовых таблиц.

  • Перекрестные с соединения

    Перекрестное соединение возвращает все строки из левой таблицы. Каждая строка из левой таблицы соединяется со всеми строками из правой таблицы. Перекрестные соединения называются также декартовым произведением.

Например, имеется внутреннее соединение, получающее служащих, которые также являются менеджерами по продажам:

USE AdventureWorks2008R2;
GO
SELECT e.BusinessEntityID
FROM HumanResources.Employee AS e
    INNER JOIN Sales.SalesPerson AS s
    ON e.BusinessEntityID = s.BusinessEntityID

Таблицы или представления в предложении FROM могут указываться в любом порядке с внутренним соединением или полным внешним соединением. Однако важен порядок таблиц или представлений, заданных при использовании левого или правого внешнего соединения. Дополнительные сведения о порядке таблиц с левыми или правыми внешними соединениями см. в разделе Работа с внешними соединениями.

Дополнительные сведения об использовании различных типов соединений см. в следующих разделах: