Freigeben über


JOIN

Gilt für: durch Häkchen mit „Ja“ markiert Databricks SQL durch Häkchen mit „Ja“ markiert 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

  • left_table_reference

    Der Tabellenverweis auf der linken Seite des Joins.

  • right_table_reference

    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.

  • table_alias

    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