JOIN
Platí pro: Databricks SQL
Databricks Runtime
Kombinuje řádky z odkazu předchozího left_table s odkazem right_table na základě kritérií spojení.
Syntaxe
{ [ 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 [, ...] ) }
Parametry
-
Odkaz na tabulku na pravé straně spojení.
join_type
Typ spojení.
[ VNITŘNÍ ]
Vrátí řádky, které mají odpovídající hodnoty v obou odkazech na tabulku. Výchozí typ spojení.
LEFT [ VNĚJŠÍ ]
Vrátí všechny hodnoty z odkazu na levou tabulku a odpovídající hodnoty z pravého odkazu na tabulku nebo připojí
NULL
, pokud neexistuje shoda. Označuje se také jako levé vnější spojení .RIGHT [ VNĚJŠÍ ]
Vrátí všechny hodnoty z pravého odkazu na tabulku a odpovídající hodnoty z odkazu na levou tabulku nebo připojí
NULL
, pokud neexistuje žádná shoda. Označuje se také jako pravý vnější spoj.PLNÁ [VNĚJŠÍ]
Vrátí všechny hodnoty z obou relací a doplní hodnoty
NULL
na straně, která nemá shodu. Označuje se také jako úplné vnější spojení .[ VLEVO ] POLO
Vrátí hodnoty z levé strany referenční tabulky, které mají shodu s pravou. Označuje se také jako levé polopřipojení.
[ VLEVO ] ANTI
Vrátí hodnoty z odkazu na levou tabulku, které nemají žádnou shodu s odkazem na správnou tabulku. 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 sloupce se shodnými názvy.
join_criteria
Volitelně určuje, jak se řádky z jednoho odkazu na tabulku zkombinují s řádky jiného odkazu na tabulku.
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 [; ...] )
Porovná řádky porovnáním rovnosti pro seznam sloupců
column_name
, které musí existovat v obou relacích.
-
Dočasný název se seznamem volitelných identifikátorů sloupců.
Notes
Když zadáte USING
nebo NATURAL
, SELECT *
zobrazí pouze jeden výskyt pro každý sloupec použitý k nalezení první shody, následované sloupci z levého, a poté pravého spojení tabulek s výjimkou sloupců použitých ke spojení.
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