JOIN
S’applique à : Databricks SQL 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
-
La référence de la table sur le côté gauche de la jointure.
-
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.
-
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