Des informations différentes peuvent être stockées dans des tables différentes et, pour les rassembler, on utilise INNER JOIN ... ON. Les jointures sont au cœur de SQL, mais elles peuvent devenir très compliquées. Commençons par un exemple simple, et commençons par un INNER JOIN.
Comme vous le voyez ci-dessous, il y a 3 tables :
character : chaque personnage est une ligne, identifiée par un identifiant unique (id) ; par exemple 1 correspond à Doogie Howser
character_tv_show : pour chaque personnage, dans quelle série apparaît-il ?
character_actor : pour chaque personnage, qui est l’acteur ?
Remarquez que dans character_tv_show, au lieu de stocker à la fois le nom du personnage et celui de la série (par exemple Willow Rosenberg et Buffy the Vampire Slayer), on stocke character_id à la place du nom du personnage. Ce character_id renvoie à la ligne de même id dans la table character.
On procède ainsi pour ne pas dupliquer les données. Par exemple, si le nom d’un personnage changeait, vous n’auriez à le modifier que dans une seule ligne.
Cela nous permet de « joindre » les tables « sur » cette colonne commune.
Pour obtenir le nom de chaque personnage avec le nom de sa série, nous pouvons écrire
SELECT character.name, character_tv_show.tv_show_name
FROM character
INNER JOIN character_tv_show
ON character.id = character_tv_show.character_id;
Cela associe chaque ligne de character à la ligne correspondante de character_tv_show, et inversement.
Remarques :
- Nous utilisons la syntaxe nom_table.nom_colonne. Si nous n’utilisions que nom_colonne, SQL pourrait se tromper de table.
- La requête d’exemple ci-dessus est écrite sur plusieurs lignes pour la lisibilité, mais cela ne change rien à la requête.
Pouvez-vous utiliser une jointure interne pour associer le nom de chaque personnage à l’acteur qui l’incarne ? Sélectionnez les colonnes : character.name, character_actor.actor_name