Compartir a través de


Operaciones LEFT JOIN y RIGHT JOIN (Microsoft Access SQL)

Se aplica a: Access 2013, Office 2013

Combina registros de una tabla de origen cuando se usa en una cláusula FROM.

Sintaxis

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

Las operaciones LEFT JOIN y RIGHT JOIN constan 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. Los campos deben ser del mismo tipo de datos y contener la misma clase de datos, pero no es necesario que tengan el mismo nombre.

opcomp

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

Comentarios

Use una operación LEFT JOIN para crear una combinación externa izquierda. Estas combinaciones incluyen todos los registros de la primera (izquierda) de dos tablas, incluso si no hay valores coincidentes para los registros en la segunda tabla (derecha).

Use una operación RIGHT JOIN para crear una combinación externa derecha. Estas combinaciones incluyen todos los registros de la segunda (derecha) de dos tablas, incluso si no hay valores coincidentes para los registros de la primera tabla (izquierda).

Por ejemplo, podría usar LEFT JOIN con las tablas Departamentos (izquierda) y Empleados (derecha) para seleccionar todos los departamentos, incluidos los que no tengan empleados asignados. Para seleccionar todos los empleados, incluidos los que no estén asignados a ningún departamento, utilizaría RIGHT JOIN.

En el siguiente ejemplo, se muestra cómo puede combinar las tablas Categories y Products por el campo CategoryID. La consulta produce una lista de todas las categorías, incluidas las que no contienen ningún producto:

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

En este ejemplo, CategoryID es el campo combinado, pero no está incluido en los resultados 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).

Nota:

  • Para crear una consulta que incluya sólo los registros en los que los datos de los campos de combinación sean iguales, use una operación INNER JOIN.
  • Las operaciones LEFT JOIN y RIGHT JOIN se pueden anidar en una operación INNER JOIN, pero una operación INNER JOIN no se puede anidar en una operación LEFT JOIN o RIGHT JOIN. Vea la descripción del anidamiento en el tema INNER JOIN acerca de cómo anidar unas combinaciones en otras.
  • Se pueden vincular varias cláusulas ON. Vea la discusión sobre la vinculación de cláusulas en el tema INNER JOIN para conocer el procedimiento.
  • Si intenta combinar campos que contienen datos Memo u Objeto OLE, se produce un error.

Ejemplo

Este ejemplo:

  • Supone la existencia de los campos hipotéticos Department Name (Nombre del departamento) y Department ID (Id. de departamento) en una tabla Employees (Empleados). Tenga en cuenta que estos campos no existen realmente en la tabla de empleados de la base de datos de Northwind.

  • Selecciona todos los departamentos, incluidos los que no tienen empleados.

  • Llama al procedimiento EnumFields, que se incluye en el ejemplo de la instrucción 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