聯結三或多個資料表
雖然每個聯結規格 (Join Specification) 都只聯結兩個資料表,但 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 個資料列受到影響)
請注意,FROM 子句的其中一個資料表 ProductVendor 並沒有提供任何資料行給結果。此外,聯結的資料行 ProductID 和 VendorID 也沒有出現在結果中。但是,此聯結只有使用 ProductVendor 做為中繼資料表時才能完成。
聯結的中間資料表 (ProductVendor 資料表) 可稱為轉譯資料表 (Translation Table) 或中繼資料表 (Intermedidate Table),因為 ProductVendor 是聯結中其他資料表的連接中繼點。
若同一個陳述式中有多個聯結運算子,不管是聯結兩個以上的資料表或聯結兩對以上的資料行,聯結運算式都可透過 AND 或 OR 來連接。