Outils pour utilisateurs

Outils du site


nsi:terminales:sql_requests_exos

Des requêtes de sélection pour s'exercer

On utilise la base films.sql vue dans le cours précédents.

Applications directes, sans jointure

  1. Lister tous les noms, prénoms, naissances d'artistes nés avant 1970
  2. Lister tous les titreVO de films dont le réalisateur à l'idArtiste 15
  3. Lister tous les rôles joués par l'artiste d'idArtiste 1

Avec une jointure

  1. Lister tous les titreVO, année des films de Tarantino
  2. Lister tous les rôles de Brad Pitt
  3. (A) Lister tous les titreVO, année des films dans lequel a joué l'artiste avec l'idArtiste 1
  4. 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
  1. (B) Trouver tous les titreVO, année des films dans lesquels joue un artiste nommé Willis
  2. 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
  1. Trouver tous les noms et prénoms, rôle et titreVO pour des acteurs jouant dans un film de Tarantino
  2. Trouver tous les noms, prénoms de réalisateurs d'un film dont dont un des acteurs est né après 1970
nsi/terminales/sql_requests_exos.txt · Dernière modification : de goupillwiki