JOIN
Van toepassing op: Databricks SQL
Databricks Runtime
Combineert de rijen van de voorgaande left_table-referentie met de right_table-referentie op basis van de joincriteria.
Syntaxis
{ [ 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 rechterkant van de koppeling.
join_type
Het koppelingstype.
[ 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 voegt
NULL
toe als er geen overeenkomst is. Het wordt ook wel een linkerbuitenjoingenoemd.RECHTS [ OUTER ]
Retourneert alle waarden uit de rechtertabelreferentie en de overeenkomende waarden uit de verwijzing naar de linkertabel of voegt
NULL
toe als er geen overeenkomst is. Het wordt ook wel een right outer joingenoemd.FULL [OUTER]
Retourneert alle waarden uit beide relaties, waarbij
NULL
waarden aan de zijkant worden toegevoegd die geen overeenkomst hebben. Het wordt ook wel een full outer joingenoemd.[ LINKS ] SEMI
Retourneert waarden aan de linkerkant van de tabelreferentie die overeenkomt met de rechterkant. Het wordt ook wel een linker semi-joingenoemd.
[ LINKS ] ANTI
Retourneert de waarden uit de linkertabelreferentie die niet overeenkomen met de rechtertabelreferentie. Het wordt ook wel een links anti-joingenoemd.
CROSS JOIN
Retourneert het Cartesische product van twee relaties.
NATUURLIJK
Hiermee bepaalt u dat de rijen van de twee relaties impliciet worden vergeleken op gelijkheid voor alle kolommen met overeenkomende namen.
join_criteria
U kunt desgewenst aangegeven hoe de rijen uit de ene tabelreferentie worden gecombineerd met de rijen van een andere tabelreferentie.
Waarschuwing
Als u de
join_criteria
semantische van eenjoin_type
van de andere weglaat, wordt dat van eenCROSS JOIN
.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 [, ...] )
Vergelijkt de rijen door gelijkheid te controleren voor de lijst van kolommen
column_name
, die in beide relaties aanwezig moeten zijn.
-
Een tijdelijke naam met een optionele kolom-id-lijst.
Opmerkingen
Wanneer u USING
of NATURAL
opgeeft, wordt in SELECT *
slechts één optreden weergegeven voor elk van de kolommen die als eerste worden gebruikt, gevolgd door de kolommen van de linker- en vervolgens de rechter join-tabellen, met uitzondering van de kolommen waarop is samengevoegd.
SELECT * FROM first JOIN second USING (a, b)
is gelijk aan
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
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