Les jointures externes
Les jointures externes permettent de récupérer toutes les données des tables, même si certaines données n’ont pas de correspondance dans l’autre table. Contrairement à la jointure interne, la jointure externe affiche plus d’informations contenues dans des tables.
Il existe plusieurs types jointures externe: LEFT JOIN, RIGTH JOIN, FULL JOINT.
Nous allons utiliser notre base de données person avec la table employee et la table customer.
Database person
Table employee
Table customer
|
LEFT JOIN (LEFT OUTER JOIN)
LEFT JOIN (gauche) affiche toutes les données (valeurs) de la table de gauche par rapport à la requête. Ici s’agit de la table qui se trouve du côté gauche de l’expression LEFT JOINT.
La syntaxe :
SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.id1 = tab2.id1 ;
Exemple de jointure externe avec LEFT JOIN
Affichons les noms et prénoms des employés avec les noms et adresses de leurs clients.
Création des alias
La classe employee a pour alias e (employee AS e) ou simplement (employee e).
La classe customer a pour alias c (customer AS c) ou simplement (customer c).
Vous pouvez aussi laisser les alias, les résultats sont toujours les mêmes.
SELECT e.last_name, e.first_name, c.name FROM employee e LEFT JOIN customer c ON e.id_customer = c.id_customer ;
Résultat :
last_name | First_name | name |
Jones | Smith | Rizzo |
Michael | Oliver | Rizzo |
William | James | Mancini |
Jack | Harry | Lombardi |
Rozario | Gustavo | NULL |
On constate que toutes les données de la table de gauche (ici c’est employee) sont affichées malgré qu’elles n’aient pas de correspondance dans la table de droite (customer).
RIGHT JOIN (RIGHT OUTER JOIN)
LEFT JOIN (droite) affiche toutes les données (valeurs) de la table de droite par rapport à la requête.
La syntaxe :
SELECT * FROM nom_tab1 RIGHT JOIN nom_tab2 ON nom_tab1.id1 = nom_tab2.id1 ;
Id1 étant la clé étrangère dans la tab2
Exemple de jointure externe avec RIGHT JOIN
Affichons les noms et âges des personnes avec leurs pays et capitales.
SELECT e.last_name, e.first_name, c.name FROM employee e RIGHT JOIN customer c ON e.id_customer = c.id_customer ;
Résultat
last_name | First_name | name |
Jones | Smith | Rizzo |
Jack | Harry | Lombardi |
William | James | Mancini |
Michael | Oliver | Rizzo |
NULL | NULL | Natcho |
On constate que la dernière ligne du table customer qui n’a pas de données correspondante dans la table employee est affichée. La ligne s’affiche mais la colonne dont la valeur est inaccessible est remplacée par NULL.
FULL JOIN (FULL OUTER JOIN)
FULL JOIN affiche toutes les données (valeurs) de la table de droite de la requête. FULL JOIN n’est pas encore acceptable dans le conteneur MySQL.
La syntaxe :
SELECT * FROM tab1 FULL JOIN tab2 ON tab1.ida = tab2.ida ;
Exemple de jointure externe avec FULL JOIN
On affiche les noms, prénoms des employés avec les noms de leurs clients.
SELECT e.last_name, e.first_name, c.name FROM employee e FULL JOIN customer c ON e.id_customer = c.id_customer ;
Résultat :
last_name | First_name | name |
Jones | Smith | Rizzo |
Michael | Oliver | Rizzo |
William | James | Mancini |
Jack | Harry | Lombardi |
Rozario | Gustavo | NULL |
NULL | NULL | Natcho |