On utilise la base films.sql vue dans le cours précédents.
Pour lier un artiste à un film en tant qu'acteur, il faut passer par JOUEDANS ce qui suppose deux jointures sous la forme
... FROM JOUEDANS JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm JOIN ARTISTE ON ARTISTE.idArtiste = JOUEDANS.idArtiste
La requête (B) correspond à la requête (A). mais nécessite une jointure supplémentaire. En situation réelle, on sera plutôt dans la situation du (A) car on connaîtra l'id de Bruce Willis
Ça commence à devenir plus compliqué et on ne vous demande pas d'aller si loin.
Si pour une paire acteur – film, on veut en plus avoir le réalisateur du film, il faut en plus joindre FILM à ARTISTE selon la clé idRéal. Cette fois c'est plus difficile car ceci ne fonctionne pas :
... FROM JOUEDANS JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm JOIN ARTISTE ON ARTISTE.idArtiste = JOUEDANS.idArtiste JOIN ARTISTE ON ARTISTE.idArtiste = FILM.idReal
Car ARTISTE apparaît deux fois pour des raisons différentes. Il est possible de se sortir d'embarras en donnant un alias à chaque occurrence de ARTISTE. Par exemple on utilisera acteur pour la première apparition de ARTISTE et réalisateur pour la deuxième :
... FROM JOUEDANS JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm JOIN ARTISTE acteur ON acteur.idArtiste = JOUEDANS.idArtiste JOIN ARTISTE réalisateur ON réalisateur.idArtiste = FILM.idReal
L'ajout de acteur et réalisateur juste à côté de ARTISTE suffit.
Supposons que l'on veuille visualiser le nom d'acteur et le nom du réalisateur, le titreVO. On ne peut pas se contenter de
SELECT nom, nom, titreVO FROM JOUEDANS JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm JOIN ARTISTE acteur ON acteur.idArtiste = JOUEDANS.idArtiste JOIN ARTISTE réalisateur ON réalisateur.idArtiste = FILM.idReal
car les deux occurrences de nom sont ambiguës : est-ce nom pour la première occurrence de ARTISTE (acteur) ou la deuxième (réalisateur) ? Il faudra préciser :
SELECT acteur.nom, réalisateur.nom, titreVO FROM JOUEDANS JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm JOIN ARTISTE acteur ON acteur.idArtiste = JOUEDANS.idArtiste JOIN ARTISTE réalisateur ON réalisateur.idArtiste = FILM.idReal