Index Suivant

1   Langages de Requêtes (6 points)

Un armateur utilise ORACLE pour gérer ses cargos :

Écrire les requêtes suivantes en algèbre relationnelle et en SQL :

Requête 1.1 :
(1 pt) Les produits transportés par le capitaine Haddock?

Solution :
pProduit(sCapitaine='Haddock' Cargos |><| Transports)
select Produit
  from Cargos, Transports
 where Cargos.NomCar = Transports.NomCar
   and Cargos.Capitaine = 'Haddock';
Requête 1.2 :
(1 pt) Les noms des cargos de plus de 20 ans qui partent le 22 Juin 2000 ('22/06/2000') de Marseille avec un produit très toxique (NiveauDanger = 5) à bord;

Solution :
pNomCar(sAge>20 Cargos |><| s
 
DateDep='22/05/2000' Ù PortDep='Marseille'
Transports |><| sNiveauDanger = 5Produits)
select Cargos.NomCar
  from Cargos, Transports, Produits
 where Cargos.NomCar = Transports.NomCar
   and Produits.Produit = Transports.Produit
   and Age > 20
   and DateDep='22/05/2000'
   and NiveauDanger = 5
   and PortDep = 'Marseille';
Requête 1.3 :
(2 pt) Les noms des cargos qui n'ont jamais transporté un produit très toxique.

Solution :
pNomCarCargos - pNomCar(Transports |><| sNiveauDanger = 5Produits)
select NomCar
  from Cargos
 where NomCar not in (select NomCar
                        from Transports, Produits
                       where Transport.Produit = Produits.Produit
                         and NiveauDanger = 5);
Requête 1.4 :
(1 pt) La requête précédente en calcul domaine ou n-uplet.

Solution :
{C.NomCar | Cargos(C) Ù ¬$ T, P (Transports(T) Ù
    Produits(P) Ù T.Produit = P.Produit Ù P.NiveauDanger = 5 Ù
    T.NomCar = C.NomCar) }
Écrire la requête suivante uniquement en SQL :

Requête 1.5 :
(1 pt) Le nombre de transports dangereux (NiveauDanger > 3) par port de départ.

Solution :

select PortDep, Count(*)
  from Transports, Produits
 where Transport.Produit = Produits.Produit
   and NiveauDanger > 3
 group by PortDep;

Index Suivant