Les jointures externes
Les jointures externes
Les jointures externes permettent de récupérer toutes les données, même celles qui n'ont pas de correspondance. On pourra ainsi obtenir Romain Vipelli dans la liste même s'il ne possède pas de jeu vidéo.
Cette fois, la seule syntaxe disponible est à base de JOIN. Il y a deux écritures à connaître : LEFT JOIN et RIGHT JOIN. Cela revient pratiquement au même, avec une subtile différence que nous allons voir.
LEFT JOIN : récupérer toute la table de gauche
Reprenons la jointure à base de INNER JOIN et remplaçons tout simplement INNER par LEFT :
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire FROM proprietaires p LEFT JOIN jeux_video j ON j.ID_proprietaire = p.ID |
proprietaires est appelée la « table de gauche » et jeux_video la « table de droite ». Le LEFT JOIN demande à récupérer tout le contenu de la table de gauche, donc tous les propriétaires, même si ces derniers n'ont pas d'équivalence dans la table jeux_video.
nom_jeu |
prenom_proprietaire |
Super Mario Bros |
Florent |
Sonic |
Patrick |
… |
… |
NULL |
Romain |
Romain apparaît désormais dans les résultats de la requête grâce à la jointure externe. Comme il ne possède aucun jeu, la colonne du nom du jeu est vide.
RIGHT JOIN : récupérer toute la table de droite
Le RIGHT JOIN demande à récupérer toutes les données de la table dite « de droite », même si celle-ci n'a pas d'équivalent dans l'autre table. Prenons la requête suivante :
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire FROM proprietaires p RIGHT JOIN jeux_video j ON j.ID_proprietaire = p.ID |
La table de droite est « jeux_video ». On récupèrerait donc tous les jeux, même ceux qui n'ont pas de propriétaire associé.
Comment est-ce possible qu'un jeu n'ait pas de propriétaire associé ?
Il y a deux cas possibles :
- soit le champ ID_proprietaire contient une valeur qui n'a pas d'équivalent dans la table des propriétaires, par exemple « 56 » ;
- soit le champ ID_proprietaire vaut NULL, c'est-à-dire que personne ne possède ce jeu. C'est le cas notamment du jeu Bomberman dans la table que vous avez téléchargée (voir tableau suivant).
ID |
nom |
ID_proprietaire |
console |
prix |
nbre_joueurs_max |
commentaires |
1 |
Super Mario Bros |
1 |
NES |
4 |
1 |
Un jeu d'anthologie ! |
2 |
Sonic |
2 |
Megadrive |
2 |
1 |
Pour moi, le meilleur jeu au monde ! |
3 |
Zelda : ocarina of time |
1 |
Nintendo 64 |
15 |
1 |
Un jeu grand, beau et complet comme on en voit rarement de nos jours |
4 |
Mario Kart 64 |
1 |
Nintendo 64 |
25 |
4 |
Un excellent jeu de kart ! |
5 |
Super Smash Bros Melee |
3 |
GameCube |
55 |
4 |
Un jeu de baston délirant ! |
... |
... |
... |
... |
... |
... |
... |
51 |
Bomberman |
NULL |
NES |
5 |
4 |
Un jeu simple et toujours aussi passionnant ! |
Dans ce cas, Bomberman n'appartient à personne. Avec la requête RIGHT JOIN que l'on vient de voir, on obtiendra toutes les lignes de la table de droite (jeux_video) même si elles n'ont aucun lien avec la table proprietaires, comme c'est le cas ici pour Bomberman.
On obtiendra donc les données exposées dans le tableau suivante.
nom_jeu |
prenom_proprietaire |
Super Mario Bros |
Florent |
Sonic |
Patrick |
… |
… |
Bomberman |
NULL |
En résumé
- Les bases de données permettent d'associer plusieurs tables entre elles.
- Une table peut contenir les id d'une autre table ce qui permet de faire la liaison entre les deux. Par exemple, la table des jeux vidéo contient pour chaque jeu l'id de son propriétaire. Le nom et les coordonnées du propriétaire sont alors stockés dans une table à part.
- Pour rassembler les informations au moment de la requête, on effectue des jointures.
- On peut faire des jointures avec le mot-clé WHERE, mais il est recommandé d'utiliser JOIN qui offre plus de possibilités et qui est plus adapté.
- On distingue les jointures internes, qui retournent des données uniquement s'il y a une correspondance entre les deux tables, et les jointures externes qui retournent toutes les données même s'il n'y a pas de correspondance.
Si vous souhaitez en savoir plus sur les bases de données MySQL, je vous invite à lire le tutoriel de Taguan entièrement dédié à MySQL.
Créé avec HelpNDoc Personal Edition: Repérez et corrigez sans effort les problèmes dans votre documentation avec l'analyseur de projet de HelpNDoc