JOIN
Gilt für: Databricks SQL Databricks Runtime
Kombiniert die Zeilen aus zwei Tabellenverweisen basierend auf Joinkriterien.
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 [, ...] ) }
Parameter
-
Der Tabellenverweis auf der linken Seite des Joins.
-
Der Tabellenverweis auf der rechten Seite des Joins.
join_type
Der Jointyp.
[ INNER ]
Gibt die Zeilen zurück, die über übereinstimmende Werte in beiden Tabellenverweisen verfügen. Der Standardjointyp.
LEFT [ OUTER ]
Gibt alle Werte aus dem linken Tabellenverweis und die übereinstimmenden Werte aus dem rechten Tabellenverweis zurück oder fügt
NULL
an, wenn keine Übereinstimmung vorhanden ist. Wird auch als linker äußerer Join bezeichnet.RIGHT [ OUTER ]
Gibt alle Werte aus dem rechten Tabellenverweis und die übereinstimmenden Werte aus dem linken Tabellenverweis zurück oder fügt
NULL
an, wenn keine Übereinstimmung vorhanden ist. Wird auch als rechter äußerer Join bezeichnet.FULL [OUTER]
Gibt alle Werte aus beiden Beziehungen zurück und fügt
NULL
-Werte auf der Seite an, die keine Übereinstimmung aufweist. Wird auch als vollständiger äußerer Join bezeichnet.[ LEFT ] SEMI
Gibt Werte von der linken Seite des Tabellenverweises zurück, für die eine Übereinstimmung mit der rechten Seite besteht. Wird auch als linker Semijoin bezeichnet.
[ LEFT ] ANTI
Gibt die Werte aus dem linken Tabellenverweis zurück, für die keine Übereinstimmung mit dem rechten Tabellenverweis besteht. Wird auch als linker Antijoin bezeichnet.
CROSS JOIN
Gibt das kartesische Produkt zweier Beziehungen zurück.
NATURAL
Gibt an, dass die Zeilen aus den beiden Beziehungen implizit auf Gleichheit bei allen Spalten mit übereinstimmenden Namen abgeglichen werden.
join_criteria
Gibt an, wie die Zeilen aus einem Tabellenverweis mit den Zeilen aus einem anderen Tabellenverweis kombiniert werden.
ON boolean_expression
Ein Ausdruck mit dem Rückgabetyp BOOLEAN, der angibt, wie die Zeilen aus den beiden Beziehungen abgeglichen werden. Wenn das Ergebnis TRUE ist, werden die Zeilen übereinstimmend betrachtet.
USING ( column_name [, …] )
Gleicht Zeilen durch Vergleich der Gleichheit für die Liste der
column_name
-Spalten ab, die in beiden Beziehungen vorhanden sein muss.
-
Ein temporärer Name mit einer optionalen Spaltenbezeichnerliste.
Hinweise
Wenn Sie USING
oder NATURAL
angeben, zeigt SELECT *
zuerst nur ein Vorkommen für jede der Spalten an, die für die Übereinstimmung verwendet werden, gefolgt von den Spalten der linken und dann der rechten Jointabellen mit Ausnahme der verknüpften Spalten.
SELECT * FROM left JOIN right USING (a, b)
für die folgende Syntax:
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
Wenn Sie join_criteria
weglassen, wird die Semantik eines join_type
zu der eines CROSS JOIN
.
Beispiele
-- 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