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

 

id_employeelast_namefirst_namesalaryid_customer
 1JonesSmith12001
 2JackHarry60303
3WilliamJames70052
4MichaelOliver35001
5RozarioGustavoNULLNULL

 

 

 

 

 

 

Table customer

 

id_customernameaddress
1Rizzo89 Oak Ave
2Mancini148 Elm St
3LombardiNY 10019 Bld
4NatchoNULL

 

 

 

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_nameFirst_namename
JonesSmithRizzo
MichaelOliverRizzo
WilliamJamesMancini
JackHarryLombardi
RozarioGustavoNULL

 

 

 

 

 

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_nameFirst_namename
JonesSmithRizzo
JackHarryLombardi
WilliamJamesMancini
MichaelOliverRizzo
NULLNULLNatcho

 

 

 

 

 

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_nameFirst_namename
JonesSmithRizzo
MichaelOliverRizzo
WilliamJamesMancini
JackHarryLombardi
RozarioGustavoNULL
NULLNULLNatcho