JOIN
Platí pro: Databricks SQL Databricks Runtime
Kombinuje řádky ze dvou odkazů na tabulku na základě kritérií spojení.
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 [, ...] ) }
Parametry
-
Odkaz na tabulku na levé straně spojení
-
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 shoda. Označuje se také jako pravé vnější spojení.PLNÁ [VNĚJŠÍ]
Vrátí všechny hodnoty z obou relací a připojí
NULL
hodnoty na straně, které nemají shodu. Označuje se také jako úplné vnější spojení.[ VLEVO ] POLO
Vrátí hodnoty z levé strany odkazu na tabulku, která odpovídá pravé. Označuje se také jako levá středník.
[ 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.
KŘÍŽOVÉ SPOJENÍ
Vrátí kartézský součin dvou vztahů.
PŘIROZENÝ
Určuje, že řádky ze dvou relací se implicitně shodují s rovností pro všechny sloupce s odpovídajícími názvy.
join_criteria
Určuje, jak se řádky z jednoho odkazu na tabulku zkombinují s řádky jiného odkazu na tabulku.
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 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í se pouze jeden výskyt pro každý sloupec použitý k první shodě, následované sloupci vlevo a potom pravé spojení tabulek s výjimkou sloupců spojených po.
SELECT * FROM left JOIN right USING (a, b)
je ekvivalentem
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
Pokud vynecháte join_criteria
sémantický sémantický z jakéhokoliv join_type
se stane tím CROSS JOIN
, že .
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