CSATLAKOZZON
A következőre vonatkozik: Databricks SQL Databricks Runtime
Két táblahivatkozás sorait egyesíti az illesztés feltételei alapján.
Szintaxis
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 [, ...] ) }
Paraméterek
-
A táblahivatkozás az illesztés bal oldalán.
-
A táblahivatkozás az illesztés jobb oldalán.
join_type
Az illesztés típusa.
[ INNER ]
Azokat a sorokat adja vissza, amelyek mindkét táblahivatkozásban egyező értékekkel rendelkeznek. Az alapértelmezett illesztéstípus.
LEFT [ OUTER ]
Visszaadja a bal oldali táblahivatkozás összes értékét és a jobb oldali táblahivatkozásból származó egyező értékeket, vagy hozzáfűzi
NULL
, ha nincs egyezés. Ezt bal oldali külső illesztésnek is nevezik.JOBBRA [ KÜLSŐ ]
A jobb oldali táblahivatkozás összes értékét és a bal oldali táblahivatkozásban szereplő egyező értékeket adja vissza, vagy hozzáfűzi
NULL
, ha nincs egyezés. Ezt jobb oldali külső illesztésnek is nevezik.TELJES [KÜLSŐ]
Mindkét kapcsolat összes értékét visszaadja, és összefűzi
NULL
azokat az értékeket az oldalon, amelyeknek nincs egyezésük. Ezt teljes külső illesztésnek is nevezik.[ BALRA ] FÉLIG
Olyan értékeket ad vissza a táblahivatkozás bal oldaláról, amelyeknek egyezése van a jobbal. Bal oldali félillesztésnek is nevezik.
[ BALRA ] ANTI
A bal oldali táblahivatkozás olyan értékeit adja vissza, amelyek nem egyeznek a jobb oldali táblahivatkozással. Ezt bal oldali illesztésnek is nevezik.
KERESZTILLESZTÉS
Két kapcsolat cartesian szorzatát adja vissza.
TERMÉSZETES
Azt adja meg, hogy a két kapcsolat sorai implicit módon egyeznek az összes egyező nevű oszlop egyenlőségével.
join_criteria
Meghatározza, hogy az egyik táblahivatkozás sorai hogyan lesznek kombinálva egy másik táblahivatkozás soraival.
ON boolean_expression
Logikai érték visszatérési típusával rendelkező kifejezés, amely meghatározza a két kapcsolat sorainak egyeztetését. Ha az eredmény igaz, a sorok egyezésnek minősülnek.
USING ( column_name [, ...] )
A sorok egyezése a két kapcsolaton belül létező oszlopok
column_name
listájának egyenlőségének összehasonlításával.USING (c1, c2)
a szinonimája.ON rel1.c1 = rel2.c1 AND rel1.c2 = rel2.c2
-
Ideiglenes név egy választható oszlopazonosító-listával.
Megjegyzések
Ha a vagy NATURAL
SELECT *
a értéket adja megUSING
, az csak egy előfordulást jelenít meg az egyezéshez használt oszlopok mindegyikéhez.
Ha kihagyja bármelyik join_criteria
szemantikai értékeit, az a szemantikai join_type
értéké CROSS JOIN
válik.
Példák
-- 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