JOIN (Databricks SQL)
Łączy wiersze z dwóch relacji na podstawie kryteriów sprzężenia.
Składnia
relation { [ join_type ] JOIN relation join_criteria |
NATURAL join_type JOIN relation |
CROSS JOIN relation }
relation
{ table_name [ table_alias ] |
view_name [ table_alias ] |
[ LATERAL ] ( query ) [ table_alias ] |
( JOIN clause ) [ table_alias ] |
VALUES clause |
[ LATERAL ] table_valued_function [ table_alias ] }
join_type
{ [ INNER ] |
LEFT [ OUTER ] |
[ LEFT ] SEMI |
RIGHT [ OUTER ] |
FULL [ OUTER ] |
[ LEFT ] ANTI |
CROSS }
join_criteria
{ ON boolean_expression |
USING ( column_name [, ...] ) }
Parametry
Relacji
Stosunki, które mają zostać połączone.
-
Odwołanie do tabeli, widoku lub wspólnego wyrażenia tabeli (CTE).
-
Odwołanie do widoku lub wspólnego wyrażenia tabeli (CTE).
[ LATERAL ] ( zapytanie )
Każde zagnieżdżone zapytanie. Kwerenda poprzedzona prefiksem
LATERAL
może odwoływać się do kolumn uwidocznionych przez poprzedniefrom_item
w tej samejFROM
klauzuli. Taka konstrukcja jest nazywana skorelowanym lub zależnym sprzężenia. Skorelowane sprzężenia nie mogą być elementamiRIGHT OUTER JOIN
FULL OUTER JOIN
lub .( Klauzula JOIN )
Wywołanie zagnieżdżone sprzężenia.
-
Klauzula tworząca śródliniową tabelę tymczasową.
[ LATERAL ]table_valued_function
Wywołanie funkcji tabeli.
-
join_type
Typ sprzężenia.
[ WEWNĘTRZNY ]
Zwraca wiersze, które mają pasujące wartości w obu relacjach. Domyślne sprzężenia.
LEFT [ OUTER ]
Zwraca wszystkie wartości z lewej relacji i dopasowane wartości z prawej relacji lub dołącza
NULL
, jeśli nie ma dopasowania. Jest on również określany jako lewe sprzężenie zewnętrzne.PRAWE [ ZEWNĘTRZNE ]
Zwraca wszystkie wartości z prawej relacji i dopasowanych wartości z lewej relacji lub dołącza
NULL
, jeśli nie ma dopasowania. Jest on również określany jako prawe sprzężenie zewnętrzne.PEŁNE [ZEWNĘTRZNE]
Zwraca wszystkie wartości z obu relacji, dołączając
NULL
wartości po stronie, które nie mają dopasowania. Jest on również określany jako pełne sprzężenie zewnętrzne.[ LEWY ] PÓŁ
Zwraca wartości z lewej strony relacji, która ma dopasowanie z prawej strony. Jest on również określany jako lewe sprzężenie częściowe.
[ LEWY ] ANTY
Zwraca wartości z lewej relacji, która nie jest zgodna z prawą. Jest on również określany jako lewy antysprzężenie.
SPRZĘŻENIA KRZYŻOWE
Zwraca kartezjański produkt dwóch stosunków.
NATURALNE
Określa, że wiersze z dwóch relacji będą niejawnie dopasowywane do równości dla wszystkich kolumn o pasujących nazwach.
join_criteria
Określa, jak wiersze z jednej relacji są łączone z wierszami innej relacji.
ON boolean_expression
Wyrażenie z zwracanym typem wartości LOGICZNEj, które określa, jak są dopasowywane wiersze z dwóch relacji. Jeśli wynik ma wartość true, wiersze są traktowane jako zgodne.
USING ( column_name [, ...] )
Dopasuj wiersze, porównując równość dla listy kolumn
column_name
, które muszą istnieć w obu relacjach.USING (c1, c2)
jest synonimem dla .ON rel1.c1 = rel2.c1 AND rel1.c2 = rel2.c2
-
Nazwa tymczasowa z opcjonalną listą identyfikatorów kolumn.
Uwagi
Jeśli określisz USING
wartość lub NATURAL
, SELECT *
będzie pokazywać tylko jedno wystąpienie dla każdej kolumny użytej do dopasowania.
Jeśli pominięto join_criteria
semantykę dowolnego join_type
obiektu, staje się wartością typu CROSS JOIN
.
Przykłady
-- 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