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 ;