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

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...

Plus en détail