Championnat de Formule 1
[20 min]
La base de données suivante permet de gérer les résultats des courses de Formule 1 dans un championnat.
1
CHAMPIONNAT(#nom:string, annee:integer)
2
CIRCUIT(#nom:string, ville:string)
3
COURSE(#nom:string,circuit=>CIRCUIT(nom), championnat=>CHAMPIONNAT(nom))
4
SPONSOR(#nom:string)
5
ECURIE(#nom:string, devise:string, couleur:string, sponsor=>SPONSOR(nom))
6
PILOTE(#id:integer, nom:string, prenom:string, ecurie=>ECURIE(nom))
7
TOUR(#pilote => PILOTE(id), #course => COURSE(nom), #num:integer, duree:integer)
Question
En algèbre relationnel et en SQL, afficher la liste de tous les pilotes dont le nom commence par la lettre 'D'.
Solution
1
R1 = Restriction(PILOTE, nom COMME 'D%')
2
R = Projection(R1, nom, prenom)
1
SELECT nom, prenom
2
FROM PILOTE P
3
WHERE P.nom LIKE 'D%' ;
Question
En SQL, afficher le nombre de pilotes par écurie en classant les résultats par ordre alphabétique des noms des écuries.
Solution
1
SELECT P.ecurie, COUNT(P.nom) AS nb_pilotes
2
FROM PILOTE P
3
GROUP BY P.ecurie
4
ORDER BY P.ecurie ;
Question
En algèbre relationnel et en SQL, afficher les noms des sponsors qui ne sont pas liés à une écurie.
Solution
1
R1 = JointureExterneGauche(SPONSOR, ECURIE, SPONSOR.nom = ECURIE.sponsor)
2
R2 = Restriction(R1, ECURIE.nom = NULL)
3
R = Projection(R2, SPONSOR.nom)
1
SELECT S.nom
2
FROM SPONSOR S LEFT JOIN ECURIE E ON S.nom = E.sponsor
3
WHERE E.nom IS NULL ;
Question
En SQL, afficher le numéro, nom, prénom et écurie, avec leur temps moyen par tour, des pilotes participant à la course Daytonutc 500
; mais en ne conservant que les pilotes qui ont effectués au moins deux tours de piste, et en classant le résultat par temps moyen décroissant.
Solution
1
SELECT T.pilote, P.nom, P.prenom, P.ecurie, AVG(T.duree) AS moyenne
2
FROM TOUR T, PILOTE P
3
WHERE T.pilote = P.id
4
AND T.course = 'Daytonutc 500'
5
GROUP BY T.pilote, P.nom, P.prenom, P.ecurie
6
HAVING COUNT(T.num) > 1
7
ORDER BY moyenne DESC ;