Freigeben über


INNER JOIN-Operation (Microsoft Access SQL)

Gilt für: Access 2013, Office 2013

Kombiniert Datensätze aus zwei Tabellen, wenn in einem gemeinsamen Feld übereinstimmende Werte vorhanden sind.

Syntax

FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1. field1compopr table2. field2

Die INNER JOIN-Operation besteht aus folgenden Komponenten:

Teil

Beschreibung

Tabelle1, Tabelle2

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

Feld1, Feld2

Die Namen der verknüpften Felder. Wenn sie nicht numerisch sind, müssen die Felder denselben Datentyp aufweisen und die gleiche Art von Daten enthalten, aber sie müssen nicht denselben Namen haben.

Vergleichsoperator

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

Hinweise

Sie können eine INNER JOIN-Operation in jeder FROM-Klausel verwenden. Hierbei handelt es sich um den Verknüpfungstyp, der im Allgemeinen verwendet wird. Innere Verknüpfungen fassen Datensätze aus zwei Tabellen zusammen, wenn sich in Feldern, die in beiden Tabellen enthalten sind, übereinstimmende Werte befinden.

You can use INNER JOIN with the Departments and Employees tables to select all the employees in each department. In contrast, to select all departments (even if some have no employees assigned to them) or all employees (even if some are not assigned to a department), you can use a LEFT JOIN or RIGHT JOIN operation to create an outer join.

If you try to join fields containing Memo or OLE Object data, an error occurs.

You can join any two numeric fields of like types. For example, you can join on AutoNumber and Long fields because they are like types. However, you cannot join Single and Double types of fields.

The following example shows how you could join the Categories and Products tables on the CategoryID field:

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

Im vorigen Beispiel ist "CategoryID" das verknüpfte Feld, wird aber nicht in die Abfrageausgabe einbezogen, 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.

Sie können auch mehrere ON-Klauseln in einer JOIN-Anweisung mit der folgenden Syntax verknüpfen:

SELECT-Felder FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1. field1compoprtable2. field1 UND Tabelle1. field2compoprtable2. field2 ODER table1. field3compoprtable2. field3;

Sie können JOIN-Anweisungen auch mithilfe der folgenden Syntax schachteln:

SELECT-Felder FROM Tabelle1 INNER JOIN (Tabelle2 INNER JOIN [( ]Tabelle3 [INNER JOIN [( ]tablex [INNER JOIN ...)] ON Tabelle3. field3compoprtablex. fieldx)] ON Table2. field2compoprtable3. field3) ON Table1. field1compoprtable2. field2;

Eine LEFT JOIN- oder RIGHT JOIN-Operation kann in einer INNER JOIN-Operation geschachtelt werden, wohingegen eine INNER JOIN-Operation nicht in einer LEFT JOIN- oder RIGHT JOIN-Operation geschachtelt werden kann.

Beispiel

This example creates two equi-joins: one between the Order Details and Orders tables and another between the Orders and Employees tables. This is necessary because the Employees table does not contain sales data, and the Order Details table does not contain employee data. The query produces a list of employees and their total sales.

This example calls the EnumFields procedure, which you can find in the SELECT statement example.

    Sub InnerJoinX() 
     
        Dim dbs As Database, rst As Recordset 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
         
        ' Create a join between the Order Details and  
        ' Orders tables and another between the Orders and  
        ' Employees tables. Get a list of employees and  
        ' their total sales. 
        Set rst = dbs.OpenRecordset("SELECT DISTINCTROW " _ 
            & "Sum(UnitPrice * Quantity) AS Sales, " _ 
            & "(FirstName & Chr(32) & LastName) AS Name " _ 
            & "FROM Employees INNER JOIN(Orders " _ 
            & "INNER JOIN [Order Details] " _ 
            & "ON [Order Details].OrderID = " _ 
            & "Orders.OrderID ) " _ 
            & "ON Orders.EmployeeID = " _ 
            & "Employees.EmployeeID " _ 
            & "GROUP BY (FirstName & Chr(32) & LastName);") 
         
        ' 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