UNIRSI
Si applica a: controllo SQL databricks Databricks Runtime
Combina le righe da due riferimenti di tabella 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 [, ...] ) }
Parametri
-
Riferimento alla tabella sul lato sinistro del join.
-
Riferimento alla tabella sul lato destro del join.
join_type
Tipo di join.
[ INNER ]
Restituisce le righe con valori corrispondenti in entrambi i riferimenti alla tabella. Tipo di join predefinito.
LEFT [ OUTER ]
Restituisce tutti i valori dal riferimento a sinistra della tabella e i valori corrispondenti dal riferimento alla tabella destra oppure aggiunge
NULL
se non è presente alcuna corrispondenza. Viene anche definito un join esterno sinistro.RIGHT [ OUTER ]
Restituisce tutti i valori dal riferimento alla tabella destra e i valori corrispondenti dal riferimento alla tabella sinistra oppure aggiunge
NULL
se non è presente alcuna corrispondenza. Viene anche definito un join esterno destro.FULL [OUTER]
Restituisce tutti i valori di entrambe le relazioni, aggiungendo
NULL
valori sul lato che non hanno una corrispondenza. Viene anche definito un join esterno completo.[ LEFT ] SEMI
Restituisce i valori dal lato sinistro del riferimento della tabella che ha una corrispondenza con la destra. Viene anche definito un semi join a sinistra.
[ LEFT ] ANTI
Restituisce i valori del riferimento a sinistra della tabella che non hanno corrispondenza con il riferimento alla tabella destra. Si tratta anche di un anti join sinistro.
CROSS JOIN
Restituisce il prodotto cartesiano di due relazioni.
NATURALE
Specifica che le righe delle due relazioni verranno corrispondenti in modo implicito all'uguaglianza per tutte le colonne con nomi corrispondenti.
join_criteria
Specifica il modo in cui le righe di un riferimento a una tabella vengono combinate con le righe di un altro riferimento alla tabella.
ON boolean_expression
Espressione con un tipo restituito di BOOLEAN 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'uguaglianza per l'elenco di colonne
column_name
che devono esistere in entrambe le relazioni.USING (c1, c2)
è un sinonimo diON rel1.c1 = rel2.c1 AND rel1.c2 = rel2.c2
.
-
Nome temporaneo con un elenco di identificatori di colonna facoltativo.
Note
Quando si specifica USING
o NATURAL
, SELECT *
viene visualizzata una sola occorrenza per ognuna delle colonne usate per la corrispondenza.
Se si omette la join_criteria
semantica di qualsiasi join_type
elemento diventa quello di un CROSS JOIN
oggetto .
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