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