JOIN (Databricks SQL)

Combineert rijen uit twee relaties op basis van joincriteria.

Syntaxis

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

Parameters

  • Relatie

    De relaties die moeten worden samengevoegd.

    • Table_name

      Een verwijzing naar een tabel, weergave of algemene tabelexpressie (CTE).

    • view_name

      Een verwijzing naar een weergave of algemene tabelexpressie (CTE).

    • [ LATERAL ] ( query )

      Een geneste query. Een query met het voorvoegsel door kan verwijzen naar kolommen die worden blootgesteld door de LATERAL voorgaande s in dezelfde from_item FROM component. Een dergelijke constructie wordt een gecorreleerde of afhankelijke join genoemd. Een gecorreleerde join kan geen RIGHT OUTER JOIN of een FULL OUTER JOIN zijn.

    • ( JOIN-component )

      Een geneste aanroep van een JOIN.

    • VALUES-component

      Een -component die een tijdelijke inlinetabel produceert.

    • Tabelwaardefunctie (TVF) (Databricks SQL)

      Een aanroep van een tabelfunctie.

  • join_type

    Het jointype.

    • [ INNER ]

      Retourneert rijen met overeenkomende waarden in beide relaties. De standaard join.

    • LEFT [ OUTER ]

      Retourneert alle waarden van de linkerrelatie en de overeenkomende waarden van de rechterrelatie, of worden bij elkaar opgeslagen als NULL er geen overeenkomst is. Het wordt ook wel een left outer join.

    • RIGHT [ OUTER ]

      Retourneert alle waarden van de rechterrelatie en de overeenkomende waarden van de linkerrelatie, of wordt aan de waarden van de relatie als er NULL geen overeenkomst is. Het wordt ook wel een right outer join.

    • FULL [OUTER]

      Retourneert alle waarden van beide relaties, door waarden toe te passen aan NULL de zijkant die geen overeenkomst hebben. Het wordt ook wel een full outer join genoemd.

    • [ LEFT ] SEMI

      Retourneert waarden aan de linkerkant van de relatie die overeenkomen met de rechterkant. Dit wordt ook wel een linker semi-join genoemd.

    • [ LEFT ] ANTI

      Retourneert waarden van de linkerrelatie die niet overeenkomen met de rechterkant. Het wordt ook wel een left anti join genoemd.

  • CROSS JOIN

    Retourneert het Cartesisch product van twee relaties.

  • NATUURLIJKE

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

  • join_criteria

    Hiermee geeft u op hoe de rijen van de ene relatie worden gecombineerd met de rijen van een andere relatie.

    • AAN boolean_expression

      Een expressie met een retourtype BOOLEAN dat aangeeft hoe rijen van de twee relaties worden gematcht. Als het resultaat waar is, worden de rijen beschouwd als een overeenkomst.

    • USING ( column_name [, ...] )

      Komt overeen met rijen door gelijkheid te vergelijken voor een lijst met kolommen column_name die in beide relaties moeten bestaan.

      USING (c1, c2) is een synoniem voor ON rel1.c1 = rel2.c1 AND rel1.c2 = rel2.c2 .

  • table_alias

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

Notities

Wanneer u USING of NATURAL opgeeft, toont een slechts één exemplaar voor elk van de kolommen SELECT * die overeenkomen.

Als u de semantische join_criteria van een weglaten wordt die van een join_type CROSS JOIN .

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