Partager via


JOIN

S’applique à : case marquée oui Databricks SQL case marquée oui Databricks Runtime

Combine les lignes de deux références de table en fonction de critères de jointure.

Syntaxe

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

Paramètres

  • left_table_reference

    La référence de la table sur le côté gauche de la jointure.

  • right_table_reference

    La référence de la table sur le côté droit de la jointure.

  • join_type

    Type de jointure.

    • [ INNER ]

      Renvoie les lignes qui ont des valeurs correspondantes dans les deux références de table. Type de jointure par défaut.

    • LEFT [ OUTER ]

      Renvoie toutes les valeurs de la référence de table de gauche et les valeurs correspondantes de la référence de table de droite, ou ajoute NULL en l’absence de correspondance. On parle également de jointure externe gauche.

    • RIGHT [ OUTER ]

      Renvoie toutes les valeurs de la référence de table de droite et les valeurs correspondantes de la référence de table de gauche, ou ajoute NULL en l’absence de correspondance. On parle également de jointure externe droite.

    • FULL [OUTER]

      Renvoie toutes les valeurs des deux relations, en ajoutant les valeurs NULL du côté où il n’y a pas de correspondance. On parle également de jointure externe entière.

    • [ LEFT ] SEMI

      Renvoie les valeurs du côté gauche de la référence de table qui a une correspondance avec le côté droit. On parle également de semi-jointure gauche.

    • [ LEFT ] ANTI

      Retourne les valeurs de la référence de table de gauche qui n’ont aucune correspondance avec la référence de table de droite. On parle également d’anti-jointure gauche.

  • CROSS JOIN

    Renvoie le produit cartésien de deux relations.

  • NATURAL

    Spécifie que les lignes des deux relations seront implicitement mises en correspondance sur l’égalité pour toutes les colonnes dont les noms correspondent.

  • join_criteria

    Spécifie la façon dont les lignes d’une référence de table sont combinées avec les lignes d’une autre référence de table.

    • ON expression_booléenne

      Expression avec un type de retour BOOLEAN qui spécifie la façon dont les lignes des deux relations sont mises en correspondance. Si le résultat est true, les lignes sont considérées comme correspondantes.

    • USING ( nom_colonne [, …] )

      Met en correspondance les lignes en comparant l’égalité pour la liste des colonnes column_name qui doivent exister dans les deux relations.

  • table_alias

    Nom temporaire avec une liste facultative d’identificateurs de colonne.

Notes

Lorsque vous spécifiez USING ou NATURAL, SELECT * affiche une seule occurrence pour chacune des colonnes utilisées pour la recherche, suivie des colonnes des tables de jointure à gauche, puis à droite, à l’exclusion des colonnes jointes.nnes jointes.

SELECT * FROM left JOIN right USING (a, b)

équivaut à :

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

Si vous omettez le join_criteria, la sémantique de tout join_type devient celle d’une CROSS JOIN.

Exemples

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