====== Des requêtes de sélection pour s'exercer ======
On utilise la base {{ nsi:terminales:database:films.sql |}} vue dans le [[nsi:terminales:sql_requests|cours précédents]].
===== Applications directes, sans jointure =====
- Lister tous les noms, prénoms, naissances d'artistes nés avant 1970
- Lister tous les titreVO de films dont le réalisateur à l'idArtiste 15
- Lister tous les rôles joués par l'artiste d'idArtiste 1
===== Avec une jointure =====
- Lister tous les titreVO, année des films de Tarantino
- Lister tous les rôles de Brad Pitt
- (A) Lister tous les titreVO, année des films dans lequel a joué l'artiste avec l'idArtiste 1
- Lister les noms et prénoms de tous les réalisateurs -- //c'est à dire des artistes qui sont réalisateurs d'un film//
===== Avec deux jointures =====
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
- (B) Trouver tous les titreVO, année des films dans lesquels joue un artiste nommé Willis
- Trouver tous les titreVO, année des films dont un acteur est né après 1970
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
===== Avec trois jointures... =====
Ç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
- Trouver tous les noms et prénoms, rôle et titreVO pour des acteurs jouant dans un film de Tarantino
- Trouver tous les noms, prénoms de réalisateurs d'un film dont dont un des acteurs est né après 1970