JOIN
Van toepassing op: Databricks SQL Databricks Runtime
Combineert de rijen uit twee tabelverwijzingen op basis van joincriteria.
Syntaxis
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
-
De tabelreferentie aan de linkerkant van de join.
-
De tabelreferentie aan de rechterkant van de join.
join_type
Het join-type.
[ INNER ]
Retourneert de rijen met overeenkomende waarden in beide tabelverwijzingen. Het standaarddeelnametype.
LINKS [ BUITENSTE ]
Retourneert alle waarden uit de linkertabelreferentie en de overeenkomende waarden uit de rechtertabelreferentie, of toevoegt
NULL
als er geen overeenkomst is. Het wordt ook wel een left outer join genoemd.RECHTS [ OUTER ]
Retourneert alle waarden uit de rechtertabelreferentie en de overeenkomende waarden uit de verwijzing naar de linkertabel, of toevoegt
NULL
als er geen overeenkomst is. Het wordt ook wel een right outer join genoemd.FULL [OUTER]
Retourneert alle waarden uit beide relaties, waarbij waarden aan de zijkant worden toegevoegd
NULL
die geen overeenkomst hebben. Het wordt ook wel een volledige outer join genoemd.[ LINKS ] SEMI
Retourneert waarden aan de linkerkant van de tabelreferentie die overeenkomt met de rechterkant. Het wordt ook wel een left semi join genoemd.
[ LINKS ] ANTI
Retourneert de waarden uit de linkertabelreferentie die niet overeenkomen met de rechtertabelreferentie. Het wordt ook wel een links anti-join genoemd.
CROSS JOIN
Retourneert het Cartesische product van twee relaties.
NATUURLIJK
Hiermee geeft u op dat de rijen van de twee relaties impliciet worden vergeleken met gelijkheid voor alle kolommen met overeenkomende namen.
join_criteria
Hiermee geeft u op hoe de rijen uit de ene tabelreferentie worden gecombineerd met de rijen van een andere tabelreferentie.
OP boolean_expression
Een expressie met een retourtype booleaanse waarde die aangeeft hoe rijen uit de twee relaties overeenkomen. Als het resultaat waar is, worden de rijen beschouwd als een overeenkomst.
USING ( column_name [, ...] )
Komt overeen met de rijen door gelijkheid te vergelijken voor de lijst met kolommen
column_name
die in beide relaties moeten bestaan.
-
Een tijdelijke naam met een optionele kolom-id-lijst.
Opmerkingen
Wanneer u opgeeft USING
of NATURAL
, SELECT *
wordt slechts één exemplaar weergegeven voor elk van de kolommen die als eerste overeenkomen, gevolgd door de kolommen van links en vervolgens rechterdeelnametabellen, met uitzondering van de kolommen die aan de kolommen zijn toegevoegd.
SELECT * FROM left JOIN right USING (a, b)
is gelijk aan
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
Als u de join_criteria
semantische van een join_type
van de andere weglaat, wordt dat van een CROSS JOIN
.
Voorbeelden
-- 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