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.
Réaliser les Requêtes suivantes:
Requête 20 : Trouver les couples acteur-réalisateur (noms et prénoms) tels que l’un a dirigé l’autre sur un film et vice-versa sur un autre.
Requête 21 : Trouver le nom, le prénom, le numéro des acteurs qui ont joué dans tous les films de Lelouch, s'il y en a.
Requête 22 : Pour chaque film de Bergman, trouver le nom et le prénom de l'acteur qui a eu le plus gros salaire.
Requête 23 : Donner le nom et le prénom des réalisateurs qui ont eu le plus gros salaire sur un de leurs films (par comparaison avec ceux des acteurs).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
Requête 20 : Trouver les couples acteur-réalisateur (noms et prénoms) tels que l“’“un a dirigé l’autre sur un film et vice-versa sur un autre. Forme plate : SELECT DISTINCT P1.PRENOM, P1.NOM, P2.PRENOM, P2.NOM FROM PERSONNE P1, PERSONNE P2, FILM F1, FILM F2, DISTRIBUTION D1, DISTRIBUTION D2 WHERE P1.NUMP > P2.NUMP AND P1.NUMP = F1.REALISATEUR AND P2.NUMP = F2.REALISATEUR AND F1.NUMF = D1.NUMF AND D1.NUMA = F2.RÉALISATEUR AND F2.NUMF = D2.NUMF AND D2.NUMA = F1.REALISATEUR Forme imbriquée: SELECT DISTINCT P1.PRÉNOM, P1.NOM, P2.PRÉNOM, P2.NOM FROM PERSONNE P1, PERSONNE P2 WHERE (P1.NUMP, P2.NUMP) IN ( SELECT F1.RÉALISATEUR, F2.RÉALISATEUR FROM FILM F1, FILM F2, DISTRIBUTION D1, DISTRIBUTION D2 WHERE F1.RÉALISATEUR > F2.RÉALISATEUR AND F1.NUMF = D1.NUMF AND D1.NUMA = F2.RÉALISATEUR AND F2.NUMF = D2.NUMF AND D2.NUMA = F1.RÉALISATEUR) Requête 21 : Trouver le nom, le prénom, le numéro des acteurs qui ont joué dans tous les films de Lelouch, s“’“il y en a. Forme imbriquée – prédicat EXISTS : « dans un des films » SELECT NOM, PRÉNOM FROM PERSONNE P WHERE EXISTS (SELECT * FROM FILM F WHERE RÉALISATEUR IN (SELECT NUMP FROM PERSONNE WHERE NOM = ‘Lelouch’) ANDEXISTS (SELECT * FROM DISTRIBUTION D WHERE D.NUMF = F.NUMF AND D.NUMA = P.NUMP) ) Requête 22 : Pour chaque film de Bergman, trouver le nom et le prénom de L“’ “acteur qui a eu le plus gros salaire. Forme imbriquée – prédicat NOT EXISTS : un seul rôle par acteur SELECT F.TITRE, PA.PRÉNOM, PA.NOM FROM FILM F, DISTRIBUTION D1, PERSONNE PA WHERE F.NUMF = D1.NUMF ANDD1.NUMA = PA.NUMP ANDRÉALISATEUR IN ( SELECT NUMP FROM PERSONNE WHERE NOM = “Bergman”) ANDNOT EXISTS ( SELECT * FROM DISTRIBUTION D2 WHERE D2.NUMF = D1.NUMF AND D2.SALAIRE > D1.SALAIRE ) Forme imbriquée + – prédicat > ALL : possibilité de plusieurs rôles pour un même acteur SELECT F.TITRE, PA.PRÉNOM, PA.NOM FROM FILM F, DISTRIBUTION D1, PERSONNE PA WHERE F.NUMF = D1.NUMF ANDD1.NUMA = PA.NUMP ANDRÉALISATEUR IN ( SELECT NUMP FROM PERSONNE WHERE NOM = ‘Bergman’) GROUP BY D1.NUMF, D1.NUMA, F.TITRE, PA.PRÉNOM, PA.NOM HAVING SUM (SALAIRE) > ALL ( SELECT SUM (SALAIRE) FROM DISTRIBUTION D2 WHERE D2.NUMF = D1.NUMF AND D2.NUMA D1.NUMA GROUP BY D2.NUMA) Forme imbriquée: possibilité de plusieurs rôles pour un même acteur SELECT F.TITRE, PA.PRÉNOM, PA.NOM FROM FILM F, PERSONNE PA WHERE (F.NUMF, PA.NUMP) IN (SELECT D1.NUMF, D1.NUMA FROM DISTRIBUTION D1 WHERE D1.NUMF IN ( SELECT NUMF FROM FILM WHERE RÉALISATEUR IN (SELECT NUMP FROM PERSONNE WHERE NOM = ‘Bergman’ ) ) GROUP BY D1.NUMF, D1.NUMA HAVING SUM (D1.SALAIRE) = ( SELECT MAX ( SELECT SUM (D2.SALAIRE) FROM DISTRIBUTION D2 WHERE D2.NUMF = D1.NUMF GROUP BY D2.NUMA)) Utilisation d’une vue GROUPée: CREATE VIEW SALAIRE_TOTAL_ACTEUR_FILM (NUMA, NUMF, SALAIRE_TOTAL) AS SELECT NUMA, NUMF, SUM (SALAIRE) FROM FILM GROUP BY NUMA, NUMF SELECT F.TITRE, PA.PRÉNOM, PA.NOM FROM FILM F, SALAIRE_TOTAL_ACTEUR_FILM D1, PERSONNE PA WHERE F.NUMF = D1.NUMF AND D1.NUMA = PA.NUMP AND RÉALISATEUR IN (SELECT NUMP FROM PERSONNE WHERE NOM = ‘Bergman’) ANDNOT EXISTS ( SELECT * FROM SALAIRE_TOTAL_ACTEUR_FILM D2 WHERE D2.NUMF = D1.NUMF AND D2.SALAIRE_TOTAL > D1.SALAIRE_TOTAL ) Requête 23 : Donner le nom et le prénom des réalisateurs qui ont eu le plus gros salaire sur un de leurs films (par comparaison avec ceux des acteurs). Forme imbriquée : SELECT PRÉNOM, NOM FROM PERSONNE WHERE NUMP IN ( SELECT RÉALISATEUR FROM FILM F WHERE SALAIRE_RÉAL > ( SELECT MAX (SALAIRE) FROM DISTRIBUTION D WHERE D.NUMF = F.NUMF ) ) Forme imbriquée 2: SELECT PRÉNOM, NOM FROM PERSONNE WHERE NUMP IN ( SELECT RÉALISATEUR FROM FILM F WHERE SALAIRE_RÉAL > ALL (SELECT SUM (SALAIRE) FROM DISTRIBUTION D WHERE D.NUMF = F.NUMF GROUP BY NUMA ) ) Forme imbriquée 3 : SELECT PRÉNOM, NOM FROM PERSONNE WHERE NUMP IN ( SELECT RÉALISATEUR FROM FILM F WHERE SALAIRE_RÉAL + (SELECT SUM (SALAIRE) FROM DISTRIBUTION D1 WHERE D1.NUMF = F.NUMF AND D1.NUMA = F.RÉALISATEUR ) >(SELECT MAX ( SELECT SUM (SALAIRE) FROM DISTRIBUTION D2 WHERE D2.NUMF = F.NUMF GROUP BY D2.NUMA ) ) ) |
0 commentaires:
Enregistrer un commentaire