Соединение трех и более таблиц
Хотя в операции соединения указываются всего две таблицы, предложение FROM может содержать несколько операций объединения. Это позволяет соединять в одном запросе несколько таблиц.
Таблица ProductVendor
базы данных AdventureWorks
является хорошим примером ситуации, в которой может понадобиться соединение более двух таблиц. Следующий запрос Transact-SQL выполняет поиск наименований всех продуктов определенной подкатегории и имена поставщиков этих продуктов:
SELECT p.Name, v.Name
FROM Production.Product p
JOIN Purchasing.ProductVendor pv
ON p.ProductID = pv.ProductID
JOIN Purchasing.Vendor v
ON pv.VendorID = v.VendorID
WHERE ProductSubcategoryID = 15
ORDER BY v.Name
Ниже приводится результирующий набор.
Name Name
LL Mountain Seat/Saddle Chicago City Saddles
ML Mountain Seat/Saddle Chicago City Saddles
HL Mountain Seat/Saddle Chicago City Saddles
LL Road Seat/Saddle Chicago City Saddles
ML Road Seat/Saddle Chicago City Saddles
HL Road Seat/Saddle Chicago City Saddles
LL Touring Seat/Saddle Chicago City Saddles
ML Touring Seat/Saddle Chicago City Saddles
HL Touring Seat/Saddle Chicago City Saddles
HL Touring Seat/Saddle Expert Bike Co
ML Touring Seat/Saddle Expert Bike Co
LL Touring Seat/Saddle Expert Bike Co
HL Road Seat/Saddle First Rate Bicycles
LL Mountain Seat/Saddle First Rate Bicycles
ML Mountain Seat/Saddle First Rate Bicycles
LL Road Seat/Saddle Hill's Bicycle Service
ML Road Seat/Saddle Hill's Bicycle Service
HL Mountain Seat/Saddle Hybrid Bicycle Center
(18 row(s) affected)
Обратите внимание, что одна из таблиц в предложении FROM, ProductVendor
, не включает в результаты ни одного из своих столбцов. Кроме того, ни один из соединяемых столбцов — ни ProductID
, ни VendorID
, не включается в результаты. Тем не менее, соединение возможно только при использовании ProductVendor
в качестве промежуточной таблицы.
Среднюю таблицу соединения, ProductVendor
, можно назвать таблицей преобразования, или промежуточной таблицей, так как ProductVendor
является промежуточной точкой объединения, которая находится между двумя другими участвующими в объединении таблицами.
При наличии в инструкции нескольких операторов соединения, применяющихся либо при соединении более двух таблиц, либо при соединении более двух пар столбцов, выражения соединения могут быть связаны операторами AND или OR.
См. также
Другие ресурсы
Предложение WHERE (Transact-SQL)
SELECT (Transact-SQL)
Операторы (Transact-SQL)
Примеры использования инструкции SELECT (Transact-SQL)