Operaciones LEFT JOIN y RIGHT JOIN (Microsoft Access SQL)

Office 2013 y posterior

Última modificación:lunes, 09 de marzo de 2015

Hace referencia a:Access 2013 | Access 2016

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

FROM tabla1 [ LEFT | RIGHT ] JOIN tabla2 ON tabla1.campo1 operadorDeComparación tabla2.campo2

Las operaciones LEFT JOIN y RIGHT JOIN constan de los siguientes elementos:

Elemento

Descripción

tabla1, tabla2

Nombres de las tablas en las que se combinan los registros.

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.

operadorDeComparación

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

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 del campo en la instrucción SELECT; en este caso, Categories.CategoryID.

NotaNota
  • 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.

  • Puede vincular varias cláusulas ON. Vea la descripción de la vinculación de cláusulas en el tema de INNER JOIN acerca de cómo llevarlo a cabo.

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

En este ejemplo, se supone la existencia de los campos hipotéticos Department Name y Department ID en una tabla Employees. Tenga en cuenta que estos campos no existen realmente en la tabla Employees (Empleados) de la base de datos Northwind (Neptuno).

En este ejemplo, se seleccionan todos los departamentos, incluidos los que no tienen empleados.

En este ejemplo, se 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
Mostrar: