Exercice Langage SQL : BD Cinéma (Partie 4)

Enoncé de l'Exercice (BD Cinéma Suite):

Les attributs NUM, NUM, NUMA, NUMC, NUMS sont des identifiants uniques (clés primaires) pour respectivement : FILM, PERSONNE, ACTEUR, CINÉMA, SALLE.
Un de ces attributs utilisé comme attribut d’une autre relation est une clé étrangère qui renvoie à la clé primaire de la relation correspondante, par exemple dans GÉNÉRIQUE, NUMF renvoie au NUMF de FILM et est défini sur le même domaine.
De plus, les attributs RÉALISATEUR dans FILM et NUMA dans ACTEUR sont définis sur le domaine des NUMP, et renvoient au NUMP de la personne correspondante.

Schéma complémentaire

                                    RÉCOMPENSE (NUMR, CATÉGORIE, FESTIVAL)

                                    RÉCOMPENSE_FILM (NUMF, ANNÉE, NUMR)

                                    RÉCOMPENSE_ACTEUR (NUMA, NUMF, ANNÉE, NUMR) 

Pour répondre aux questions suivantes, il faut noter que lorsqu'un acteur reçoit une récompense, le film en reçoit une indirectement.

Ce schéma complémentaire conduit à utiliser une union dans les requêtes.


Réaliser les Requêtes suivantes:

Requête 24 : Donner le titre des films qui ont été primés au moins une fois (y compris les récompenses des acteurs jouant dans le film).

Requête 25 : Lister les cinémas qui ont exclusivement passé des films primés.

Requête 26 : Donner le titre des films qui ont reçu au moins trois récompenses.

Requête 27 : Noms et prénoms des acteurs qui ont reçu plus de récompenses qu'aucun acteur qui a joué dans "Casablanca" n'en a eu.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899Requête 24 : Donner le titre des films qui ont été primés au moins une fois (y compris les récompenses des acteurs jouant dans le film). Forme plate: SELECT DISTINCT F.TITRE, F.ANNÉE FROM FILM F, RÉCOMPENSE_FILM RF WHERE F.NUMF = RF.NUMF UNION SELECT DISTINCT F.TITRE, F.ANNÉE FROM FILM F, RÉCOMPENSE_ACTEUR RAWHERE F.NUMF = RA.NUMF Forme imbriquée: SELECT TITRE, ANNÉE FROM FILM WHERE NUMF IN ( SELECT NUMF FROM RÉCOMPENSE_FILM UNION SELECT NUMF FROM RÉCOMPENSE_ACTEUR ) Requête 25 : Lister les cinémas qui ont exclusivement passé des films primés. Forme imbriquée: SELECT NOM, VILLE FROM CINÉMA C WHERE NOT EXISTS ( SELECT * FROM PASSE P WHERE P.NUMC = C.NUMC AND NOT EXISTS (SELECT * FROM RÉCOMPENSE_FILM RF WHERE RF.NUMF = P.NUMF ) ANDNOT EXISTS ( SELECT * FROM RÉCOMPENSE_ACTEUR RAWHERE RA.NUMF = P.NUMF ) ) Forme imbriquée– prédicat NOT EXISTS : SELECT NOM, VILLE FROM CINÉMA C WHERE NOT EXISTS ( SELECT * FROM PASSE P WHERE P.NUMC = C.NUMC AND NOT EXISTS ( SELECT * FROM ( SELECT NUMF FROM RÉCOMPENSE_FILM UNION SELECT NUMF FROM RÉCOMPENSE_ACTEUR ) AS RWHERE R.NUMF = P.NUMF ) )  Forme imbriquée – prédicat NOT IN : SELECT NOM, VILLE FROM CINÉMA WHERE NUMC NOT IN ( SELECT NUMC FROM PASSE WHERE NUMF NOT IN ( SELECT R.NUMF FROM ( SELECT NUMF FROM RÉCOMPENSE_FILM UNION SELECT NUMF FROM RÉCOMPENSE_ACTEUR ) AS R ) ) ) Requête 26 : Donner le titre des films qui ont reçu au moins trois récompenses. Forme imbriquée: SELECT TITRE, ANNÉE FROM FILM WHERE NUMF IN ( SELECT R.NUMF FROM ( SELECT NUMF FROM RÉCOMPENSE_FILM UNION SELECT NUMF FROM RÉCOMPENSE_ACTEUR ) AS R GROUP BY R.NUMF HAVING COUNT (*) >= 3 ) Requête 27 : Noms et prénoms des acteurs qui ont reçu plus de récompenses qu”'”aucun acteur qui a joué dans "Casablanca" n”'”en a eu. Forme imbriquée: SELECT PRÉNOM, NOM FROM PERSONNE WHERE NUMP IN ( SELECT NUMA FROM RÉCOMPENSE_ACTEUR GROUP BY NUMA HAVING COUNT (*) > ( SELECT MAX ( SELECT COUNT (*) FROM RÉCOMPENSE_ACTEUR WHERE NUMA IN ( SELECT NUMA FROM DISTRIBUTION WHERE NUMF IN ( SELECT NUMF FROM FILM WHERE TITRE = ‘Casablanca’)) GROUP BY NUMA)))
Article publié le 12 Décembre 2011