Partager via


Opérations LEFT JOIN, RIGHT JOIN (Microsoft Access SQL)

S’applique à : Access 2013, Office 2013

Combine les enregistrements source-table lorsqu’ils sont utilisés dans une clause FROM.

Syntaxe

FROM table1 [ LEFT | RIGHT ] JOIN table2 ON table1.field1compopr table2.field2

Les opérations LEFT JOIN et RIGHT JOIN sont composées des arguments suivants :

Partie

Description

table1, table2

Nom des tables dont les enregistrements sont combinés.

champ1, champ2

Noms des champs joints. Les champs doivent être du même type et doivent contenir le même type de données, mais il ne doivent pas obligatoirement avoir le même nom.

oprcomp

Tout opérateur de comparaison relationnel : « = », « < », « > », « <= », « >= », ou « <> ».

Remarques

Utilisez une opération LEFT JOIN pour créer une jointure externe gauche. Les jointures externes gauche comprennent tous les enregistrements de la première des deux tables (la table de gauche), même si aucune valeur de cette table ne correspond aux enregistrements dans la seconde table (la table de droite).

Utilisez une opération RIGHT JOIN pour créer une jointure externe droite. Les jointures externes droite comprennent tous les enregistrements de la seconde table (la table de droite), même si aucune valeur de cette table ne correspond aux enregistrements dans la première table (la table de gauche).

Vous pouvez par exemple utiliser LEFT JOIN avec les tables Departments (services) (gauche) et Employees (employés) (droite) pour sélectionner tous les services, y compris ceux auxquels aucun employé n'est assigné. Pour sélectionner tous les employés, y compris ceux qui ne sont pas assignés à un service, utilisez RIGHT JOIN.

L'exemple suivant montre comment vous pouvez joindre les tables Categories (catégories) et Products (produits) sur le champ CategoryID. La requête produit une liste de toutes les catégories, y compris celles qui ne contiennent aucun produit :

SELECT CategoryName, 
ProductName 
FROM Categories LEFT JOIN Products 
ON Categories.CategoryID = Products.CategoryID;

Dans cet exemple, CategoryID est le champ joint, mais il n'est pas inclus dans les résultats de la requête, car il n'est pas inclus dans l'instruction SELECT. Pour inclure le champ joint, entrez le nom du champ dans l’instruction SELECT : dans ce cas, Categories.CategoryID.

Notes

  • Pour créer une requête qui n’indique que les enregistrements dans lesquels les données dans les champs joints sont identiques, utilisez une opération INNER JOIN.
  • Une jointure LEFT JOIN ou RIGHT JOIN peut être imbriquée dans une jointure INNER JOIN, mais une jointure INNER JOIN ne peut pas être imbriquée dans une jointure LEFT JOIN ou RIGHT JOIN. Reportez-vous à la section concernant l'imbrication de jointures dans la rubrique INNER JOIN pour savoir comment imbriquer des jointures dans d'autres jointures.
  • Vous pouvez lier plusieurs clauses ON. Voyez la discussion relative à la liaison de clause dans la rubrique Jointure interne pour voir comment procéder
  • Si vous essayez de joindre des champs contenant des données de type Mémo ou Objet OLE, une erreur se produit.

Exemple

Cet exemple :

  • Suppose l'existence de champs hypothétiques de nom de département et d'ID de département dans une table Employés. Notez que ces champs n’existent pas dans la table d’employés de la base de données Northwind.

  • Sélectionne tous les services, y compris ceux sans employés.

  • Appelle la procédure EnumFields, que vous trouverez dans l’exemple d’instruction SELECT.

    Sub LeftRightJoinX() 
     
        Dim dbs As Database, rst As Recordset 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
         
        ' Select all departments, including those  
        ' without employees. 
        Set rst = dbs.OpenRecordset _ 
            ("SELECT [Department Name], " _ 
            & "FirstName & Chr(32) & LastName AS Name " _ 
            & "FROM Departments LEFT JOIN Employees " _ 
            & "ON Departments.[Department ID] = " _ 
            & "Employees.[Department ID] " _ 
            & "ORDER BY [Department Name];") 
         
        ' Populate the Recordset. 
        rst.MoveLast 
         
        ' Call EnumFields to print the contents of the  
        ' Recordset. Pass the Recordset object and desired 
        ' field width. 
        EnumFields rst, 20 
     
        dbs.Close 
     
    End Sub