JOIN
Se aplica a: Databricks SQL 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
-
La referencia de tabla a la izquierda de la combinación.
-
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.
-
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