JOIN
Si applica a: Databricks SQL Databricks Runtime
Combina le righe di due riferimenti table in base ai criteri di join.
Sintassi
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 [, ...] ) }
Parameters
-
Il riferimento table sul lato sinistro del join.
-
Il riferimento table sul lato destro del join.
join_type
Il tipo join.
[ INNER ]
Restituisce le righe che hanno values corrispondente in entrambi i riferimenti table. Il valore predefinito tipo join.
LEFT [ OUTER ]
Restituisce tutti i values dal riferimento sinistro table e il values corrispondente dal riferimento destro table, oppure aggiunge
NULL
se non vi è alcuna corrispondenza. È anche definito come una esterna sinistra join.RIGHT [ OUTER ]
Restituisce tutti i values dal riferimento table destro e il values corrispondente dal riferimento table sinistro oppure accoda
NULL
se non esiste alcuna corrispondenza. Viene anche definito come esterno destro join.FULL [OUTER]
Restituisce tutte le values da entrambe le relazioni, aggiungendo
NULL
values sul lato che non ha una corrispondenza. Viene anche definito come joincompleto esterno.[ LEFT ] MEZZO
Restituisce values dal lato sinistro del riferimento table che ha una corrispondenza con la destra. Viene anche definito come semi sinistra join.
[ LEFT ] ANTI
Restituisce il values dai riferimenti table a sinistra che non hanno alcuna corrispondenza con i riferimenti table a destra. Viene anche definito un anti a sinistra di anti join.
CROSS JOIN
Restituisce il prodotto cartesiano di due relazioni.
NATURAL
Specifica che le righe delle due relazioni verranno confrontate in modo implicito in base all'uguaglianza per ogni columns con nomi corrispondenti.
join_criteria
Facoltativamente, specifica il modo in cui le righe di un riferimento table vengono combinate con le righe di un altro riferimento table.
Avvertimento
Se si omette la
join_criteria
semantica di unjoin_type
oggetto diventa quella di un oggettoCROSS JOIN
.ON boolean_expression
Espressione con un tipo restituito booleano che specifica la corrispondenza delle righe delle due relazioni. Se il risultato è true, le righe vengono considerate una corrispondenza.
USING ( column_name [, ...] )
Corrisponde alle righe confrontando l'equivalenza per list di columns
column_name
, che devono esistere in entrambe le relazioni.
-
Nome temporaneo con un columnidentifierlistfacoltativo.
Note
Quando si specifica USING
o NATURAL
, SELECT *
mostrerà solo un'occorrenza per ogni columns usata per trovare la corrispondenza prima, seguita dal columns di sinistra, quindi jointables destra escludendo il columns unito.
SELECT * FROM first JOIN second USING (a, b)
equivale a
SELECT first.a, first.b,
first.* EXCEPT(a, b),
second.* EXCEPT(a, b)
FROM first JOIN second ON first.a = second.a AND first.b = second.b
Esempi
-- 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