Corrigé du contrôle pour les EI 96/97

INSTITUT NATIONAL DES TELECOMMUNICATIONS

 

CONTROLE DES CONNAISSANCES

 

 

Bloc : Bases de données Code : BD22

 

Durée : 1h30 Date : 05/12/96

 

Documents autorisés : Coordonnateur :

ceux distribués en cours Mr Defude

 

____________________________________________________

 

Avertissements

 

1/ Lisez attentivement le sujet.

 

2/ Les questions sont indépendantes les unes des autres

 

3/ Essayez d'être clair et précis dans vos réponses.

 

4/ Soignez la présentation, dans la mesure du possible.

 

5/ Barême indicatif

 

Question 1 : 5 points (Q1.1 = 4 pts, Q1.2 = 1pt)

Question 2 : 3 points (Q2.1 = 1 pt, Q2.1 = 2 pt)

Question 3 : 8 points (Q3.1 = 2 pts, Q3.2 = 2 pts, Q3.3 = 2 pts, Q3.4 = 2
pts)

Question 4 : 4 points (Q4.1 = 2 pts, Q4.2 = 2 pts)

 

 

 

Question 1-1

 

 

Question 1-2

 

- un joueur ne peut participer dans un tournoi à un match d'un
tour supérieur à un match qu'il a perdu,

 

- un joueur ne pas jouer un match contre lui-même,

 

- un tournoi ne pas avoir de match d'un numéro de tour supérieur
au nombre de tours de la catégorie du tournoi.

 

Question 2

 

 

Exprimer chacune des 2 questions suivantes, d'une part en
algèbre relationnelle sous la forme d'un arbre
algébrique
, et d'autre part en SQL.

 

(Q2.1)

 

 

SELECT notournoi, ville


FROM TOURNOIS T, CATEGORIES C


WHERE T.nocategorie=C.nocategorie AND nbtours >= 4

 

(Q2.2)


 

 

SELECT T.notournoi, T.pays


FROM TOURNOIS T, MATCHS M, JOUEURS J


WHERE T.notournoi=M.notournoi AND


M.nojoueur1=J.nojoueur


AND J.nom='Sampras'

 

Question 3

 

 

(Q3.1)

 

SELECT COUNT(*)


FROM JOUEURS J, MATCHS M


WHERE J.nom='Sampras' AND (M.nojoueur1=J.nojoueur


OR M.nojoueur2=J.nojoueur)

 

 

(Q3.2)

SELECT J.nojoueur, J.nom, COUNT(*)


FROM JOUEURS J, MATCHS M


WHERE J.nojoueur=M.nojoueur1


GROUP BY J.nojoueur, J.nom

 

(Q3.3)

SELECT pays


FROM TOURNOIS


GROUP BY pays


HAVING COUNT(*) >= 3

 

 

(Q3.4)

SELECT M.nojoueur1


FROM MATCHS M, TOURNOIS T, CATEGORIES C


WHERE M.notournoi=T.notournoi AND


C.nocategorie=T.nocategorie


GROUP BY M.nojoueur1


HAVING SUM(nbpoints) >=


ALL (SELECT SUM(nbpoints)


FROM MATCHS M1, TOURNOIS T1,


CATEGORIES C1


WHERE M1.notournoi=T1.notournoi AND


C1.nocategorie=T1.nocategorie


GROUP BY M1.nojoueur1)

 

 

NB : on peut remplacer le >= ALL par par = (SELECT MAX(SUM(nbpoints)...)

 

Question 4

 

Exprimer les 2 questions suivantes en algèbre relationnelle
ou en SQL :

 

(Q4.1)

SELECT nojoueur1


FROM MATCHS M


GROUP BY nojoueur1


HAVING COUNT(distinct notournoi) =


(SELECT COUNT(*)


FROM TOURNOIS)

 

 

 

 

(Q4.2) Donner le numéro et nom des joueurs qui ont gagné
au moins un tournoi.

 

SELECT J.nom, M.nojoueur1


FROM MATCHS M, JOUEURS J


WHERE M.nojoueur1=J.nojoueur AND NOT EXISTS (


SELECT *


FROM MATCHS M1


WHERE M1.notournoi=M.notournoi AND


M1.nojoueur2=M.nojoueur1 )