JOIN
Gäller för: Databricks SQL Databricks Runtime
Kombinerar raderna från två tabellreferenser baserat på kopplingsvillkor.
Syntax
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 [, ...] ) }
Parametrar
-
Tabellreferensen till vänster om kopplingen.
-
Tabellreferensen till höger om kopplingen.
join_type
Kopplingstypen.
[ INRE ]
Returnerar de rader som har matchande värden i båda tabellreferenserna. Standardkopplingstyp.
VÄNSTER [ YTTRE ]
Returnerar alla värden från den vänstra tabellreferensen och de matchade värdena från den högra tabellreferensen, eller tillägg
NULL
om det inte finns någon matchning. Det kallas även för en vänster yttre koppling.HÖGER [ YTTRE ]
Returnerar alla värden från den högra tabellreferensen och de matchade värdena från den vänstra tabellreferensen, eller tillägg
NULL
om det inte finns någon matchning. Det kallas också för en höger yttre koppling.FULL [YTTRE]
Returnerar alla värden från båda relationerna och lägger till
NULL
värden på sidan som inte har någon matchning. Det kallas även för en fullständig yttre koppling.[ VÄNSTER ] SEMI
Returnerar värden från vänster sida av tabellreferensen som har en matchning mot höger. Det kallas även för en vänster halvkoppling.
[ VÄNSTER ] ANTI
Returnerar värdena från den vänstra tabellreferensen som inte har någon matchning med den högra tabellreferensen. Det kallas också för en vänster antikoppling.
KORSKOPPLING
Returnerar den kartesiska produkten av två relationer.
NATURLIG
Anger att raderna från de två relationerna implicit matchas vid likhet för alla kolumner med matchande namn.
join_criteria
Anger hur raderna från en tabellreferens kombineras med raderna i en annan tabellreferens.
PÅ boolean_expression
Ett uttryck med returtypen BOOLEAN som anger hur rader från de två relationerna matchas. Om resultatet är sant betraktas raderna som en matchning.
USING ( column_name [, ...] )
Matchar raderna genom att jämföra likheten för en lista över kolumner
column_name
som måste finnas i båda relationerna.
-
Ett tillfälligt namn med en valfri kolumnidentifierarlista.
Kommentar
När du anger USING
eller NATURAL
, SELECT *
visas bara en förekomst för var och en av de kolumner som används för att matcha först, följt av kolumnerna till vänster och sedan höger kopplingstabeller exklusive de kolumner som är anslutna.
SELECT * FROM left JOIN right USING (a, b)
motsvarar
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
Om du utelämnar semantiken join_criteria
för någon join_type
blir det för en CROSS JOIN
.
Exempel
-- 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
Relaterade artiklar
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för