Unione in join di tre o più tabelle

Ogni join consente di unire solo due tabelle. Tuttavia, dato che le clausole FROM possono includere più definizioni di join, è possibile unire in join numerose tabelle utilizzando la stessa query.

La tabella ProductVendor del database AdventureWorks2008R2 rappresenta un ottimo esempio di situazione in cui risulta utile unire in join più di due tabelle. La query Transact-SQL seguente viene utilizzata per trovare i nomi di tutti i prodotti di una determinata sottocategoria e i nomi dei relativi fornitori:

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;

Set di risultati:

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 righe interessate)

Si noti che il risultato non include le colonne di una delle tabelle specificate nella clausola FROM, ovvero ProductVendor, né le colonne unite in join ProductID e VendorID. È tuttavia possibile eseguire questo join solo se si utilizza ProductVendor come tabella intermedia.

La tabella di mezzo del join, ovvero la tabella ProductVendor, può essere definita tabella di trasferimento o intermedia, in quanto ProductVendor rappresenta un punto di connessione intermedio tra le altre tabelle unite in join.

Se nella stessa istruzione sono inclusi più operatori di join che consentono di unire più di due tabelle o più di due coppie di colonne, le espressioni di join possono essere concatenate tramite l'operatore AND o OR.