Freigeben über


LEFT JOIN- und RIGHT JOIN-Operation (Microsoft Access SQL)

Gilt für: Access 2013, Office 2013

Kombiniert bei Verwendung in einer FROM-Klausel Datensätze der Herkunftstabellen.

Syntax

FROM Tabelle1 [ LEFT | RIGHT ] JOIN Table2 ON Table1.field1compopr table2.field2

Die Operationen LEFT JOIN und RIGHT JOIN enthalten die folgenden Bestandteile:

Teil

Beschreibung

Tabelle1, Tabelle2

Die Namen der Tabellen, aus denen Datensätze zusammengefasst werden.

Feld1, Feld2

Die Namen der verknüpften Felder. Die Felder müssen denselben Datentyp aufweisen und dieselbe Art von Daten enthalten, doch sie müssen nicht denselben Namen tragen.

Vergleichsoperator

Ein relationaler Vergleichsoperator: "=," "<," ">," "<=," ">=," oder "<>."

Hinweise

Verwenden Sie eine LEFT JOIN-Operation, um eine linke äußere Verknüpfung zu erstellen. Eine linke äußere Verknüpfung enthält alle Datensätze aus der ersten (linken) der beiden Tabellen, selbst wenn die zweite (rechte) Tabelle keine übereinstimmenden Werte enthält.

Verwenden Sie eine RIGHT JOIN-Operation, um eine rechte äußere Verknüpfung zu erstellen. Eine rechte äußere Verknüpfung enthält alle Datensätze aus der zweiten (rechten) der beiden Tabellen, selbst wenn die erste (linke) Tabelle keine übereinstimmenden Werte enthält.

For example, you could use LEFT JOIN with the Departments (left) and Employees (right) tables to select all departments, including those that have no employees assigned to them. To select all employees, including those who are not assigned to a department, you would use RIGHT JOIN.

The following example shows how you could join the Categories and Products tables on the CategoryID field. The query produces a list of all categories, including those that contain no products:

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

In diesem Beispiel ist "CategoryID" das verknüpfte Feld, ist aber nicht im Abfrageergebnis enthalten, da es nicht in der SELECT-Anweisung enthalten ist. Um das verknüpfte Feld einzuschließen, geben Sie den Feldnamen in die SELECT-Anweisung ein, in diesem Fall Categories.CategoryID.

Hinweis

  • Wenn Sie eine Abfrage erstellen möchten, die nur Datensätze mit jeweils identischen Daten in den verknüpften Feldern enthält, verwenden Sie eine INNER JOIN-Operation.
  • Ein LEFT JOIN oder RIGHT JOIN kann in einem INNER JOIN geschachtelt werden, aber ein INNER JOIN kann nicht in einem LEFT JOIN oder einem RIGHT JOIN geschachtelt werden. Informationen zum Schachteln von Joins in anderen Joins finden Sie in der Erläuterung der Schachtelung im Thema INNER JOIN.
  • Sie können mehrere ON-Klauseln verknüpfen. Entsprechende Informationen finden Sie in der Erläuterung zum Verknüpfen von Klauseln im Thema zur INNER JOIN-Operation.
  • Wenn Sie versuchen, Felder mit Memo- oder OLE-Objektdaten zu verknüpfen, tritt ein Fehler auf.

Beispiel

In diesem Beispiel:

  • Wird davon ausgegangen, dass die Employees-Tabelle die hypothetischen Felder Department Name und Department ID enthält. Beachten Sie, dass diese Felder nicht in der Mitarbeitertabelle der Northwind-Datenbank vorhanden sind.

  • Es werden alle Abteilungen ausgewählt, auch die Abteilungen ohne Mitarbeiter.

  • Die EnumFields-Prozedur wird aufgerufen, die im Beispiel für die SELECT-Anweisung enthalten ist.

    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