Compartir a través de


Operación INNER JOIN (Microsoft Access SQL)

Se aplica a: Access 2013, Office 2013

Combina los registros de dos tablas si hay valores coincidentes en un campo común.

Sintaxis

FROM table1 INNER JOIN table2 ON table1. field1compopr table2. field2

La operación INNER JOIN consta de las siguientes partes:

Part

Descripción

tabla1, tabla2

Nombres de las tablas cuyos registros se combinan.

campo1, campo2

Nombres de los campos que se combinan. Si no son numéricos, los campos deben tener el mismo tipo de datos y contener el mismo tipo de datos, pero no es necesario que tengan el mismo nombre.

opcomp

Cualquier operador de comparación relacional: "=," "<", ">", "<=", ">=" o "<>".

Comentarios

Puede usar una operación INNER JOIN en una cláusula FROM. Este tipo de combinación es el más común. Las combinaciones internas combinan registros de dos tablas si hay valores coincidentes en un campo común a ambas.

Puede usar INNER JOIN con las tablas Departments and Employees (Departamentos y empleados) para seleccionar todos los empleados de cada departamento. Por el contrario, para seleccionar todos los departamentos (incluso si algunos no tienen empleados asignados) o todos los empleados (incluso si algunos no están asignados a un departamento), puede usar una operación LEFT JOIN o RIGHT JOIN para crear una combinación externa.

Si se intenta combinar campos que contienen datos de tipo Memo u Objeto OLE, se produce un error.

Puede combinar dos campos numéricos de tipos similares. Por ejemplo, puede combinar campos de tipo AutoNumber y Long porque son similares. Sin embargo, no puede combinar campos de tipo Single y Double.

En el siguiente ejemplo, se muestra cómo puede combinar las tablas Categories y Products por el campo CategoryID:

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

En el ejemplo anterior, CategoryID es el campo combinado, pero no se incluye en el resultado de la consulta porque no está contenido en la instrucción SELECT. Para incluir el campo combinado, escriba el nombre de campo en la instrucción SELECT (en este caso, Categories.CategoryID).

También puede vincular varias cláusulas ON en una instrucción JOIN mediante la siguiente sintaxis:

SELECT campos FROM table1 INNER JOIN table2 ON table1. field1compoprtable2. field1 AND table1. field2compoprtable2. field2 OR table1. field3compoprtable2. field3;

También puede anidar instrucciones JOIN mediante la siguiente sintaxis:

SELECT fields FROM table1 INNER JOIN (table2 INNER JOIN [( ]table3 [INNER JOIN [( ]tablex [INNER JOIN ...)] ON tabla3. field3compoprtablex. fieldx)] ON table2. field2compoprtable3. field3) ON table1. field1compoprtable2. field2;

LEFT JOIN o RIGHT JOIN se pueden anidar dentro de INNER JOIN, pero INNER JOIN no se puede anidar dentro de LEFT JOIN o RIGHT JOIN.

Ejemplo

En este ejemplo, se crean dos combinaciones de equivalencia: una entre las tablas Order Details y Orders, y otra entre las tablas Orders y Employees. Esto es necesario porque la tabla Employees no contiene datos de ventas y la tabla Order Details no contiene datos de empleados. La consulta produce una lista de empleados y sus ventas totales.

En este ejemplo, se llama al procedimiento EnumFields, que se incluye en el ejemplo de la instrucción SELECT.

    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