Compartir a través de


JOIN

Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime

Combina las filas de dos referencias de tabla en función de criterios de combinación.

Sintaxis

left_table_reference { [ join_type ] JOIN right_table_reference join_criteria |
           NATURAL join_type JOIN right_table_reference |
           CROSS JOIN right_table_reference }

join_type
  { [ INNER ] |
    LEFT [ OUTER ] |
    [ LEFT ] SEMI |
    RIGHT [ OUTER ] |
    FULL [ OUTER ] |
    [ LEFT ] ANTI |
    CROSS }

join_criteria
  { ON boolean_expression |
    USING ( column_name [, ...] ) }

Parámetros

  • left_table_reference

    La referencia de tabla a la izquierda de la combinación.

  • right_table_reference

    La referencia de tabla a la derecha de la combinación.

  • join_type

    El tipo de combinación.

    • [ INNER ]

      Devuelve las filas que tienen valores coincidentes en ambas referencias de tabla. Se trata del tipo de combinación predeterminado.

    • LEFT [ OUTER ]

      Devuelve todos los valores de la referencia de tabla izquierda y los valores coincidentes de la referencia de tabla derecha, o anexa NULL si no hay ninguna coincidencia. También se conoce como combinación externa izquierda.

    • RIGHT [ OUTER ]

      Devuelve todos los valores de la referencia de tabla derecha y los valores coincidentes de la referencia de tabla izquierda, o anexa NULL si no hay ninguna coincidencia. También se conoce como combinación externa derecha.

    • FULL [OUTER]

      Devuelve todos los valores de ambas relaciones y anexa valores NULL en el lado que no tiene ninguna coincidencia. También se conoce como combinación externa completa.

    • [ LEFT ] SEMI

      Devuelve valores del lado izquierdo de la referencia de tabla, que tiene una coincidencia con el derecho. También se conoce como semicombinación izquierda.

    • [ LEFT ] ANTI

      Devuelve los valores de la referencia de tabla izquierda que no tienen ninguna coincidencia con la referencia de tabla derecha. También se conoce como anticombinación izquierda.

  • CROSS JOIN

    Devuelve el producto cartesiano de dos relaciones.

  • NATURAL

    Especifica que las filas de las dos relaciones van a combinarse de forma implícita por igualdad en todas las columnas con nombres coincidentes.

  • join_criteria

    Especifica cómo se combinan las filas de una referencia de tabla con las de otra.

    • ON boolean_expression

      Expresión con un tipo de valor devuelto BOOLEAN que especifica cómo se combinan las filas de las dos relaciones. Si el resultado es "true", las filas se consideran una coincidencia.

    • USING ( column_name [, …] )

      Combina las filas al comparar la igualdad de la lista de columnas column_name, que debe existir en ambas relaciones.

  • table_alias

    Nombre temporal con una lista de identificadores de columna opcionales.

Notas

Al especificar USING o NATURAL, SELECT * solo mostrará una repetición de cada una de las columnas usadas para que coincidan primero, seguidas de las columnas de la izquierda y, a continuación, las tablas de combinación derecha excluyendo las columnas combinadas.

SELECT * FROM left JOIN right USING (a, b)

es equivalente a

SELECT left.a, left.b,
       left.* EXCEPT(a, b),
       right.* EXCEPT(a, b)
  FROM left JOIN right ON left.a = right.a AND left.b = right.b

Si se omite join_criteria, la semántica de cualquier join_type se convierte en la de CROSS JOIN.

Ejemplos

-- Use employee and department tables to demonstrate different type of joins.
> CREATE TEMP VIEW employee(id, name, deptno) AS
     VALUES(105, 'Chloe', 5),
           (103, 'Paul' , 3),
           (101, 'John' , 1),
           (102, 'Lisa' , 2),
           (104, 'Evan' , 4),
           (106, 'Amy'  , 6);

> CREATE TEMP VIEW department(deptno, deptname) AS
    VALUES(3, 'Engineering'),
          (2, 'Sales'      ),
          (1, 'Marketing'  );

-- Use employee and department tables to demonstrate inner join.
> SELECT id, name, employee.deptno, deptname
   FROM employee
   INNER JOIN department ON employee.deptno = department.deptno;
 103  Paul      3 Engineering
 101  John      1   Marketing
 102  Lisa      2       Sales

-- Use employee and department tables to demonstrate left join.
> SELECT id, name, employee.deptno, deptname
   FROM employee
   LEFT JOIN department ON employee.deptno = department.deptno;
 105 Chloe      5        NULL
 103  Paul      3 Engineering
 101  John      1   Marketing
 102  Lisa      2       Sales
 104  Evan      4        NULL
 106   Amy      6        NULL

-- Use employee and department tables to demonstrate right join.
> SELECT id, name, employee.deptno, deptname
    FROM employee
    RIGHT JOIN department ON employee.deptno = department.deptno;
 103  Paul      3 Engineering
 101  John      1   Marketing
 102  Lisa      2       Sales

-- Use employee and department tables to demonstrate full join.
> SELECT id, name, employee.deptno, deptname
    FROM employee
    FULL JOIN department ON employee.deptno = department.deptno;
 101  John      1   Marketing
 106   Amy      6        NULL
 103  Paul      3 Engineering
 105 Chloe      5        NULL
 104  Evan      4        NULL
 102  Lisa      2       Sales

-- Use employee and department tables to demonstrate cross join.
> SELECT id, name, employee.deptno, deptname
    FROM employee
    CROSS JOIN department;
 105 Chloe      5 Engineering
 105 Chloe      5   Marketing
 105 Chloe      5       Sales
 103  Paul      3 Engineering
 103  Paul      3   Marketing
 103  Paul      3       Sales
 101  John      1 Engineering
 101  John      1   Marketing
 101  John      1       Sales
 102  Lisa      2 Engineering
 102  Lisa      2   Marketing
 102  Lisa      2       Sales
 104  Evan      4 Engineering
 104  Evan      4   Marketing
 104  Evan      4       Sales
 106   Amy      4 Engineering
 106   Amy      4   Marketing
 106   Amy      4       Sales

-- Use employee and department tables to demonstrate semi join.
> SELECT *
    FROM employee
    SEMI JOIN department ON employee.deptno = department.deptno;
 103  Paul      3
 101  John      1
 102  Lisa      2

-- Use employee and department tables to demonstrate anti join.
> SELECT *
    FROM employee
    ANTI JOIN department ON employee.deptno = department.deptno;
 105 Chloe      5
 104  Evan      4
 106   Amy      6

-- Use employee and department tables to demonstrate lateral inner join.
> SELECT id, name, deptno, deptname
    FROM employee
    JOIN LATERAL (SELECT deptname
                    FROM department
                    WHERE employee.deptno = department.deptno);
 103 Paul    3  Engineering
 101 John    1  Marketing
 102 Lisa    2  Sales

-- Use employee and department tables to demonstrate lateral left join.
> SELECT id, name, deptno, deptname
    FROM employee
    LEFT JOIN LATERAL (SELECT deptname
                         FROM department
                         WHERE employee.deptno = department.deptno);
 105 Chloe   5      NULL
 103 Paul    3      Engineering
 101 John    1      Marketing
 102 Lisa    2      Sales
 104 Evan    4      NULL
 106 Amy     6      NULL