Index Suivant

1   Langages de Requêtes (8 points)

Soit le schéma relationnel suivant avec trois relations : Écrire les requêtes suivantes en algèbre relationnelle et en SQL :

Requête 1.1 :
(1 point) Les noms des personnes qui se trouvent à l'hôtel 'Château de Barive' le '15/07/2000'?

Solution :
pPNom(Personnes |><| s
 
HNom = ``Chateau de Barive''Ù Debut <= '15/07/2000' Ù Fin >= '15/07/2000'
Reservations )
select distinct PNom
  from Personnes, Réservations
 where Personnes.PNom = Réservations.PNom
   and HNom = 'Château de Barive'
   and Début <= '15/07/2000' 
   and Fin >= '15/07/2000';
Requête 1.2 :
(1 point) Les noms des personnes qui ont réservé une chambre dans un hôtel du département où ils habitent?

Solution :
pHNom(sPDept = HDept(Personnes |><| Reservations |><| Hotels))
select PNom
  from Personnes, Réservations, Hôtels
 where Personnes.PNom = Réservations.PNom
   and Hôtels.HNom = Réservations.HNom
   and PDept = HDept;
Requête 1.3 :
(1 point) Les hôtels qui n'ont pas de clients Parisiens?

Solution :
pHNom(Hotels) - pHNom(Reservations |><| sPVille='Paris'Personnes)
select HNom
  from Hôtels
 where not exists (select *
                     from Personnes, Réservations
                    where Personnes.PNom = Réservations.PNom
                      and Hôtels.HNom = Réservations.HNom
                      and PVille = 'Paris')
Requête 1.4 :
(1 point) Les hôtels qui n'ont que des clients Parisiens?

Solution :
pHNom(Hotels) - pHNom(Reservations |><| sPVille<>'Paris'Personnes)
select HNom
  from Motels
 where not exists (select *
                     from Personnes, Réservations
                    where Personnes.PNom = Réservations.PNom
                      and Hôtels.HNom = Réservations.HNom
                      and PVille <> 'Paris')
Requête 1.5 :
(1 point) La requête précédente en calcul relationnel (domaine ou n-uplet)?

Solution :
{ h.HNom | Hotels(h) Ù ¬ $p, r: (Personnes(p) Ù Reservations(r) Ù
    p.PNom = r.PNom Ù h.HNom = r.HNom Ù p.PVille <> 'Paris' )}
Écrire les requêtes suivantes uniquement en SQL :
Requête 1.6 :
(1 point) Le nombre de réservations par hôtel (et le nom de l'hôtel) au mois de juillet (début de réservation au mois de juillet)?

Solution :
select HNom, count(*)
  from Réservations
 where Début >= '01/07/2000' and Début <= '31/07/2000' 
 group by HNom;
Requête 1.7 :
(1 point) Les noms des hôtels avec au moins trois clients de la même ville (et le nom de la ville)?

Solution :
select HNom, PVille
  from Personnes, Réservations
 where Personnes.PNom = Réservations.PNom
 group by HNom, PVille
having count(*) >= 3;
Requête 1.8 :
(1 point) Est-ce qu'il est possible de répondre à la requête précédente en algèbre relationnelle?

Solution : OUI

Index Suivant