JOIN
Platí pro: Databricks SQL Databricks Runtime
Kombinuje řádky ze dvou odkazů table na základě kritérií join.
Syntaxe
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
-
Odkaz table na levé straně join.
-
Odkaz table na pravé straně join.
join_type
Typ join.
[ VNITŘNÍ ]
Vrátí řádky, které mají odpovídající values v obou odkazech table. Výchozí typ join.
LEFT [ VNĚJŠÍ ]
Vrátí všechny values z levé table reference a odpovídající values z pravé table reference nebo přidá
NULL
, pokud se neshodují. Označuje se také jako levé vnější join.RIGHT [ VNĚJŠÍ ]
Vrátí všechny values z pravého table odkazu a odpovídající values z levého table odkazu nebo připojí
NULL
, pokud neexistuje shoda. Označuje se také jako pravé vnější join.PLNÁ [VNĚJŠÍ]
Vrátí všechny values z obou relací a připojí
NULL
values na stranu, která nemá shodu. Označuje se také jako úplné vnější join.[ VLEVO ] POLO
Vrátí values z levé strany odkazu table, který má shodu s pravou stranou. Označuje se také jako levá join.
[ VLEVO ] ANTI
Vrátí odkazy values z levého table, které neodpovídají pravému table. Označuje se také jako levý anti join.
CROSS JOIN
Vrátí kartézský součin dvou vztahů.
PŘIROZENÝ
Určuje, že řádky ze dvou relací budou implicitně porovnávány na základě rovnosti pro všechny columns se shodnými názvy.
join_criteria
Volitelně určuje, jak se řádky z jednoho table odkazu zkombinují s řádky jiného table odkazu.
Varování
Pokud vynecháte
join_criteria
sémantický sémantický z jakéhokolivjoin_type
se stane tímCROSS JOIN
, že .ZAPNUTO boolean_expression
Výraz s návratovým typem logické hodnoty, který určuje, jak se řádky ze dvou relací shodují. Pokud je výsledek pravdivý, považuje se řádky za shodu.
USING ( column_name [; ...] )
Odpovídá řádkům porovnáním rovnosti pro listcolumns
column_name
, které musí existovat v obou relacích.
-
Dočasný název s volitelným columnidentifierlist.
Notes
Když zadáte USING
nebo NATURAL
, SELECT *
zobrazí pouze jeden výskyt pro každý columns použitý k prvnímu porovnání, následovaný columns levé a poté pravé jointables, s výjimkou columns, které byly spojeny.
SELECT * FROM first JOIN second USING (a, b)
je ekvivalentem
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
Příklady
-- 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