Partager via


Jointure de trois tables ou plus

Bien que chaque spécification de jointure ne joigne que deux tables, les clauses FROM peuvent contenir plusieurs spécifications de jointure. Ceci permet de joindre plusieurs tables dans une requête unique.

La table ProductVendor de la base de données AdventureWorks2008R2 constitue un exemple intéressant de l'utilité de joindre plus de deux tables. La requête Transact-SQL suivante recherche le nom de tous les produits d'une sous-catégorie particulière ainsi que le nom de leurs fournisseurs :

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;

Voici l'ensemble des résultats.

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)

Notez qu'aucune colonne de la table ProductVendor de la clause FROM ne se retrouve dans les colonnes de résultats. Les colonnes jointes, ProductID et VendorID, ne figurent pas non plus dans les résultats. Néanmoins, cette jointure n'est réalisable qu'en utilisant la table ProductVendor comme intermédiaire.

La table centrale de la jointure (ProductVendor dans la requête précédente) peut être appelée table de traduction ou table intermédiaire, étant donné que ProductVendor est un point de connexion intermédiaire entre les autres tables impliquées dans la jointure.

Lorsqu'une même instruction contient plusieurs opérateurs de jointure, pour joindre plus de deux tables ou plus de deux paires de colonnes, les conditions de jointure peuvent être reliées par AND ou OR.