INF245 - partiel mars 2012 (solutions)
Transcription
INF245 - partiel mars 2012 (solutions)
L2 Informatique, 2011/12 GDINF245 - Gestion de données relationnelles et applications Licence Science et Technologies Devoir surveillé - mars 2012, des solutions 1 A propos de bars Question 1 (5 points) : En considérant les relations fournies en annexe, donner le résultat retourné par chacune des requêtes ci-dessous (considérer le système Oracle vu en TP). Il peut s’agir d’une erreur, ou de n-uplets affichés sous forme de tableau. on (bar = name) where price > 3 ; 1. select beer, price from Likes natural join Sells where bar = ’Marble Bar’ and drinker = ’Adam’; BEER PRICE -------------------------- ---------Burragorang Bock 3.5 Three Sheets 3.75 Old Admiral 3.75 BEER PRICE ------------------------------ ---------New 2.8 Old 2.8 4. select bar, count(beer), min(price) from Sells group by bar ; 2. select bar, drinker from Frequents minus select bar from Sells where price < 10 ; La requête est incorrecte car les schémas des sous-requêtes sont incompatibles. 3. select beer, price from Bars left outer join Sells BAR COUNT(BEER) MIN(PRICE) ------------------------- ----------- ---------Australia Hotel 1 3.5 Coogee Bay Hotel 4 2.3 Lord Nelson 2 3.75 Marble Bar 3 2.8 Regent Hotel 2 2.2 Royal Hotel 3 2.3 Question 2 (5 points) : Ré-écrire en SQL les requêtes suivantes en respectant à chaque fois les instructions fournies. 1. select distinct beer, price from Sells where bar in (select name from Bars where addr = ’Toowong’) La requête ne doit pas comporter l’opérateur in. select distinct beer, price from Sells join Bars on (bar = name) where addr = ’Toowong’ 2. select bar from Frequents where drinker = ’Adam’ intersect select bar from Frequents where drinker = ’John’; La requête ne doit pas comporter l’opérateur in, ni l’opérateur intersect. select distinct F1.bar from Frequents F1 join Frequents F2 on (F1.bar = F2.bar) where F1.drinker = ’Adam’ and F2.drinker = ’John’ c M.-C. Fauvet, C. Parent-Vigouroux – UJF/UFRIM2 AG – mars, 2012 page 1 L2 Informatique, 2011/12 GDINF245 - Gestion de données relationnelles et applications 3. select distinct name, manf from Beers join Sells on (name=beer) where price in (select max(price) from Sells) La requête ne doit pas comporter la forme ...in (select...) ni la forme ...= (select...). select distinct name, manf from Beers join Sells on (name=beer) join (select max(price) as maxPrice from Sells) X on (price = maxPrice) 2 A propos de théâtre Question 3 (10 points) : Exprimer en SQL les requêtes ci-dessous. A chaque fois, respecter les instructions données. 1. Donner le prix des places de la catégorie ”poulailler”. Barême : 1 select prix from LesCatégories where nomC = ’poulailler’; 2. Donner les numéros des clients qui ont acheté au moins un ticket pour une représentation du spectacle dont le nom est ’Le lac des cygnes’. Barême : 1 select distinct noClient from LesTickets natural join LesSpectacles where nomS = ’Le lac des cygnes’ 3. Pour chaque zone de la catégorie ’poulailler’, donner son numéro, le nombre de places qu’elle comporte et son prix. Barême : 1 select numZ, count(*) as nbPlaces, prix from LesCatégories natural join LesZones natural join LesPlaces where nomC = ’poulailler’ group by numZ, prix 4. Pour chaque spectacle, donner son numéro, son nom, la date de sa première représentation dans le temps. Barême : 1 select numS, nomS, to{char(‘DD-Month-YYYY HH24’, min(dateRep)) as premRep from LesSpectacles natural join LesReprésentations group by numS, nomS 5. Donner les numéros des clients qui n’ont pas acheté de tickets pour la représentation du 21/1/2012 à 10H du spectacle de nom ’Le lac des cygnes’. Barême : 2 c M.-C. Fauvet, C. Parent-Vigouroux – UJF/UFRIM2 AG – mars, 2012 page 2 L2 Informatique, 2011/12 GDINF245 - Gestion de données relationnelles et applications select noClient from LesTickets minus select noClient from LesTickets natural join LesSpectacles where to_char(dateRep, ’DD/MM/YYYY HH24’) = ’21/1/2012 10’ and nomS = ’Le lac des cygnes’ 6. Donner les numéros et noms des spectacles qui ont exactement une représentation. Instruction : la requête ne doit comporter ni clause group by, ni fonctions d’agrégation (count, sum, etc). Barême : 2 select numS, nomS from LeSpectacles minus -- les numéros et noms des spectacles qui ont au moins 2 représentations select S.numS, S.nomS from LesSpectacles S join LesReprésentations R1 on (S.numS = R1.numS) join LesReprésentations R2 on (S.numS = R2.numS and R1.dateRep <> R2.dateRep) Dans la seconde condition de mise en correspondance l’expression (R1.numS = R2.numS and R1.dateRep <> R2.dateRep) est correcte. 7. Pour chaque représentation, donner le numéro de son spectacle, sa date, et par zone de la salle, le nombre et le cumul des prix des tickets vendus pour cette représentation. Le résultat comporte un ensemble de nuplets <s, d, z, n, p> tels que s est un numéro de spectacle, d une date de représentation de s, z est une zone du théâtre, et n est le nombre de tickets vendus dans la zone z pour la représentation d du spectacle s, et p est le cumul des prix de ces tickets. Cas particuliers : (1) Si aucun ticket n’a été vendu pour la représentation d du spectacle s alors z est sans valeur, n=0 et p=0. (2) Si pour la représentation d du spectacle s, dans la zone z aucune place ne correspond à un ticket vendu, alors n=0 et p=0. Barême : 2 Dans la clause select l’expression count(*) ne permet pas de compter le nombre de tickets vendus (elle compte le nombre de nuplets de chaque classe construite par la partition). select numS, to_char(dateRep, ’DD-MM-YYYY HH24 H’) as dateRep, numZ, count (noSérie) as nbPlacesVendues, sum (nvl (prix, 0)) as prixTotal from LesReprésentations natural left outer join LesTickets natural left outer join LesPlaces natural left outer join LesZones natural left outer join LesCatégories group by numS, dateRep, numZ c M.-C. Fauvet, C. Parent-Vigouroux – UJF/UFRIM2 AG – mars, 2012 page 3
Documents pareils
INF245 - partiel mars 2012
un ensemble de nuplets
tels que s est un numéro de spectacle, d une date de
représentation de s, z est une zone du théâtre, et n est le nombre de tickets vendus dans la zone
z p...