Delen via


JOIN

Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime

Combineert de rijen van de voorgaande left_table-referentie met de right_table-referentie op basis van de joincriteria.

Syntaxis

{ [ 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 [, ...] ) }

Parameters

  • right_table_reference

    De tabelreferentie aan de rechterkant van de koppeling.

  • join_type

    Het koppelingstype.

    • [ INNER ]

      Retourneert de rijen met overeenkomende waarden in beide tabelverwijzingen. Het standaarddeelnametype.

    • LINKS [ BUITENSTE ]

      Retourneert alle waarden uit de linkertabelreferentie en de overeenkomende waarden uit de rechtertabelreferentie, of voegt NULL toe als er geen overeenkomst is. Het wordt ook wel een linkerbuitenjoingenoemd.

    • RECHTS [ OUTER ]

      Retourneert alle waarden uit de rechtertabelreferentie en de overeenkomende waarden uit de verwijzing naar de linkertabel of voegt NULL toe als er geen overeenkomst is. Het wordt ook wel een right outer joingenoemd.

    • FULL [OUTER]

      Retourneert alle waarden uit beide relaties, waarbij NULL waarden aan de zijkant worden toegevoegd die geen overeenkomst hebben. Het wordt ook wel een full outer joingenoemd.

    • [ LINKS ] SEMI

      Retourneert waarden aan de linkerkant van de tabelreferentie die overeenkomt met de rechterkant. Het wordt ook wel een linker semi-joingenoemd.

    • [ LINKS ] ANTI

      Retourneert de waarden uit de linkertabelreferentie die niet overeenkomen met de rechtertabelreferentie. Het wordt ook wel een links anti-joingenoemd.

  • CROSS JOIN

    Retourneert het Cartesische product van twee relaties.

  • NATUURLIJK

    Hiermee bepaalt u dat de rijen van de twee relaties impliciet worden vergeleken op gelijkheid voor alle kolommen met overeenkomende namen.

  • join_criteria

    U kunt desgewenst aangegeven hoe de rijen uit de ene tabelreferentie worden gecombineerd met de rijen van een andere tabelreferentie.

    Waarschuwing

    Als u de join_criteria semantische van een join_type van de andere weglaat, wordt dat van een CROSS JOIN.

    • OP boolean_expression

      Een expressie met een retourtype booleaanse waarde die aangeeft hoe rijen uit de twee relaties overeenkomen. Als het resultaat waar is, worden de rijen beschouwd als een overeenkomst.

    • USING ( column_name [, ...] )

      Vergelijkt de rijen door gelijkheid te controleren voor de lijst van kolommen column_name, die in beide relaties aanwezig moeten zijn.

  • table_alias

    Een tijdelijke naam met een optionele kolom-id-lijst.

Opmerkingen

Wanneer u USING of NATURALopgeeft, wordt in SELECT * slechts één optreden weergegeven voor elk van de kolommen die als eerste worden gebruikt, gevolgd door de kolommen van de linker- en vervolgens de rechter join-tabellen, met uitzondering van de kolommen waarop is samengevoegd.

SELECT * FROM first JOIN second USING (a, b)

is gelijk aan

SELECT first.a, first.b,
       first.* EXCEPT(a, b),
       second.* EXCEPT(a, b)
  FROM first JOIN second ON first.a = second.a AND first.b = second.b

Voorbeelden

-- 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