JOIN (SQL Analytics)

Combine des lignes de deux relations en fonction de critères de jointure.

Syntaxe

relation { [ join_type ] JOIN relation [ join_criteria ] | NATURAL join_type JOIN relation }

Paramètres

  • titre

    Relation à joindre.

  • join_type

    Type de jointure.

    Syntaxe :

    [ INNER ] | CROSS | LEFT [ OUTER ] | [ LEFT ] SEMI | RIGHT [ OUTER ] | FULL [ OUTER ] | [ LEFT ] ANTI

  • join_criteria

    Spécifie la manière dont les lignes d’une relation sont combinées avec les lignes d’une autre relation.

    Syntaxe :ON boolean_expression | USING ( column_name [ , ... ] )

    boolean_expression

    Expression avec un type de retour booléen.

Types de jointure

Inner Join

Retourne les lignes qui ont des valeurs correspondantes dans les deux relations. Jointure par défaut.

Syntaxe :

relation [ INNER ] JOIN relation [ join_criteria ]

Jointure gauche

Retourne toutes les valeurs de la relation de gauche et les valeurs correspondantes de la relation droite, ou s’ajoute en l' NULL absence de correspondance. Elle est également appelée jointure externe gauche.

Syntaxe :

relation LEFT [ OUTER ] JOIN relation [ join_criteria ]

RIGHT JOIN

Retourne toutes les valeurs de la relation droite et les valeurs correspondantes de la relation de gauche, ou s’ajoute en l' NULL absence de correspondance. Elle est également appelée jointure externe droite.

Syntaxe :

relation RIGHT [ OUTER ] JOIN relation [ join_criteria ]

Jointure complète

Retourne toutes les valeurs des deux relations, en ajoutant les NULL valeurs du côté qui n’ont pas de correspondance. On parle également de jointure externe complète.

Syntaxe :

relation FULL [ OUTER ] JOIN relation [ join_criteria ]

Cross Join

Retourne le produit cartésien de deux relations.

Syntaxe :

relation CROSS JOIN relation [ join_criteria ]

Semi-jointure

Retourne des valeurs à partir du côté gauche de la relation qui a une correspondance avec le droit. Elle est également appelée semi-jointure gauche.

Syntaxe :

relation [ LEFT ] SEMI JOIN relation [ join_criteria ]

Anti-jointure

Retourne les valeurs de la relation de gauche qui n’ont pas de correspondance avec la droite. Elle est également appelée « anti-jointure gauche ».

Syntaxe :

relation [ LEFT ] ANTI JOIN relation [ join_criteria ]

Exemples

-- Use employee and department tables to demonstrate different type of joins.
SELECT * FROM employee;
+---+-----+------+
| id| name|deptno|
+---+-----+------+
|105|Chloe|     5|
|103| Paul|     3|
|101| John|     1|
|102| Lisa|     2|
|104| Evan|     4|
|106|  Amy|     6|
+---+-----+------+

SELECT * FROM department;
+------+-----------+
|deptno|   deptname|
+------+-----------+
|     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;
+---+-----+------+-----------|
| id| name|deptno|   deptname|
+---+-----+------+-----------|
|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;
+---+-----+------+-----------|
| id| name|deptno|   deptname|
+---+-----+------+-----------|
|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;
+---+-----+------+-----------|
| id| name|deptno|   deptname|
+---+-----+------+-----------|
|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;
+---+-----+------+-----------|
| id| name|deptno|   deptname|
+---+-----+------+-----------|
|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;
+---+-----+------+-----------|
| id| name|deptno|   deptname|
+---+-----+------+-----------|
|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;
+---+-----+------+
| id| name|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;
+---+-----+------+
| id| name|deptno|
+---+-----+------+
|105|Chloe|     5|
|104| Evan|     4|
|106|  Amy|     6|
+---+-----+------+