联接三个或更多表

虽然每个联接规范只联接两个表,但 FROM 子句可包含多个联接规范。这样一个查询可以联接许多表。

AdventureWorks2008R2 数据库的 ProductVendor 表是一个很好的示例,在该示例联接两个以上的表非常有用。下面的 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.BusinessEntityID = v.BusinessEntityID
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 连接在一起。