Correction de l
-
Upload
cedric-huynh -
Category
Documents
-
view
318 -
download
1
Transcript of Correction de l
Correction de l'exercice d'application n°1 REPRESENTATION (n°représentation, titre_représentation, lieu) MUSICIEN (nom, n°représentation*) PROGRAMMER (date, n°représentation*, tarif)1 - Donner la liste des titres des représentations. R = PROJECTION(REPRESENTATION, titre_représentation)Et en langage SQL...SELECT titre_représentation FROM REPRESENTATION ;2 - Donner la liste des titres des représentations ayant lieu à l'opéra Bastille.R1 = SELECTION(REPRESENTATION, lieu="Opéra Bastille") R2 = PROJECTION(R1, titre_représentation)Et en langage SQL...SELECT titre_représentation FROM REPRESENTATIONWHERE lieu="Opéra Bastille" ;3 - Donner la liste des noms des musiciens et des titres des représentations auxquelles ils participent. R1 = JOINTURE(MUSICIEN, REPRESENTATION, Musicien.n°représentation=Représentation.n°représentation) R2 = PROJECTION(R1, nom, titre_représentation)Et en langage SQL...SELECT nom, titre_représentationFROM MUSICIEN INNER JOIN REPRESENTATION ON MUSICIEN.n°représentation = REPRESENTATION.n°représentation ;4 - Donner la liste des titres des représentations, les lieux et les tarifs pour la journée du 14/09/96.R1 = SELECTION(PROGRAMMER, date=14/09/96) R2 = JOINTURE(R1, REPRESENTATION, R1.n°représentation=Représentation.n°représentation) R3 = PROJECTION(R2, titre_représentation, lieu, tarif)Et en langage SQL...SELECT titre_représentation, lieu, tarifFROM REPRESENTATION INNER JOIN PROGRAMMER ON PROGRAMMER.n°représentation = REPRESENTATION.n°représentationWHERE date='14/06/96' ;
Correction de l'exercice d'application n°2 ETUDIANT(N°Etudiant, Nom, Prénom) MATIERE(CodeMat, LibelléMat, CoeffMat) EVALUER(N°Etudiant*, CodeMat*, Date, Note)1 - Quel est le nombre total d'étudiants ? N=CALCULER(ETUDIANT, Comptage())Et en langage SQL...SELECT COUNT(*) FROM ETUDIANT ;2 - Quelles sont, parmi l'ensemble des notes, la note la plus haute et la note la plus basse ? R=CALCULER(EVALUER, Minimum(Note), Maximum(Note))Et en langage SQL...SELECT MIN(Note), MAX(Note) FROM EVALUER ;3 - Quelles sont les moyennes de chaque étudiant dans chacune des matières ? R1=REGROUPER_ET_CALCULER(EVALUER, N°Etudiant, CodeMat, MoyEtuMat : Moyenne(Note)) R2=JOINTURE(R1, MATIERE, MATIERE.CodeMat=R1.CodeMat) R3=JOINTURE(R2, ETUDIANT, ETUDIANT.N°Etudiant=R2.N°Etudiant) MOYETUMAT=PROJECTION(R3, N°Etudiant, Nom, Prénom, LibelléMat, CoeffMat, MoyEtuMat)Et en langage SQL...CREATE VIEW MOYETUMAT ASSELECT ETUDIANT.N°Etudiant, Nom, Prénom, LibelléMat, CoeffMat, AVG(Note) AS MoyEtuMatFROM EVALUER INNER JOIN MATIERE ON EVALUER.CodeMat = MATIERE.CodeMatINNER JOIN ETUDIANT ON EVALUER.N°Etudiant = ETUDIANT.N°EtudiantGROUP BY ETUDIANT.N°Etudiant, Nom, Prénom, LibelléMat, CoeffMat;Remarque : la commande CREATE VIEW va permettre de réutiliser le résultat de la requête (notamment aux deux questions suivantes) comme s'il s'agissait d'une nouvelle table (bien qu'elle soit regénérée dynamiquement lors de son utilisation).Sous Access, il ne faut pas utiliser la commande CREATE VIEW mais seulement enregistrer la requête. Il est alors possible de s'en resservir comme une table.
4 - Quelles sont les moyennes par matière ?Idem question 3 puis : R4=REGROUPER_ET_CALCULER(MOYETUMAT, LibelléMat, Moyenne(MoyEtuMat))Et en langage SQL...Avec la vue MOYETUMAT de la question 3 :SELECT LibelléMat, AVG(MoyEtuMat)FROM MOYETUMATGROUP BY LibelléMat ;5 - Quelle est la moyenne générale de chaque étudiant ? Idem question 3 puis :MGETU=REGROUPER_ET_CALCULER(MOYETUMAT, N°Etudiant, Nom, Prénom, MgEtu : Somme(MoyEtuMat*CoeffMat)/Somme(CoeffMat)) Et en langage SQL...Avec la vue MOYETUMAT de la question 3 :CREATE VIEW MGETU ASSELECT N°Etudiant, Nom, Prénom, SUM(MoyEtuMat*CoeffMat)/SUM(CoeffMat) AS MgEtuFROM MOYETUMATGROUP BY N°Etudiant, Nom, Prénom ;6 - Quelle est la moyenne générale de la promotion ? Idem question 5 puis :MG=CALCULER(MGETU, Moyenne(MgEtu)) Et en langage SQL...Avec la vue MGETU de la question 5 :SELECT AVG(MgEtu) FROM MGETU ;7 - Quels sont les étudiants qui ont une moyenne générale supérieure ou égale à la moyenne générale de la promotion ? Idem question 5 et 6 puis : R=SELECTION(MGETU, MgEtu>=MG)Et en langage SQL...Avec la vue MGETU de la question 5 :SELECT N°Etudiant, Nom, Prénom, MgEtuFROM MGETUWHERE MgEtu >= (SELECT AVG(MgEtu) FROM MGETU) ;
Correction de l'exercice d'application n°3 EQUIPE(CodeEquipe, NomEquipe, DirecteurSportif) COUREUR(NuméroCoureur, NomCoureur, CodeEquipe*, CodePays*) PAYS(CodePays, NomPays) TYPE_ETAPE(CodeType, LibelléType) ETAPE(NuméroEtape, DateEtape, VilleDép, VilleArr, NbKm, CodeType*) PARTICIPER(NuméroCoureur*, NuméroEtape*, TempsRéalisé) ATTRIBUER_BONIFICATION(NuméroEtape*, km, Rang, NbSecondes, NuméroCoureur*)1 - Quelle est la composition de l'équipe FESTINA (Numéro, nom et pays des coureurs) ? R1=SELECTION(EQUIPE, NomEquipe="FESTINA") R2=JOINTURE(R1, COUREUR, R1.CodeEquipe=COUREUR.CodeEquipe) R3=JOINTURE(R2, PAYS, R2.CodePays=PAYS.CodePays) R4=PROJECTION(R3, NuméroCoureur, NomCoureur, NomPays)Et en langage SQL...SELECT NuméroCoureur, NomCoureur, NomPaysFROM EQUIPE A INNER JOIN COUREUR B ON A.CodeEquipe=B.CodeEquipeINNER JOIN PAYS C ON B.CodePays=C.CodePaysWHERE NomEquipe="FESTINA" ;2 - Quel est le nombre de kilomètres total du Tour de France 97 ? N=CALCULER(ETAPE, SOMME(NbKm))Et en langage SQL...SELECT SUM(Nbkm) FROM ETAPE ;3 - Quel est le nombre de kilomètres total des étapes de type HAUTE MONTAGNE ? R1=SELECTION(TYPE_ETAPE, LibelléType="HAUTE MONTAGNE") R2=JOINTURE(R1, ETAPE, R1.CodeType=ETAPE.CodeType) N=CALCULER(R2, SOMME(NbKm))Et en langage SQL...SELECT SUM(Nbkm) FROM ETAPE A INNER JOIN TYPE_ETAPE B ON A.CodeType=B.CodeTypeWHERE LibelléType="HAUTE MONTAGNE" ;4 - Quels sont les noms des coureurs qui n'ont pas obtenu de bonifications ?
R1=PROJECTION(COUREUR, NuméroCoureur) R2=PROJECTION(ATTRIBUER_BONIFICATION, NuméroCoureur) R3=DIFFERENCE(R1,R2) R4=JOINTURE(R3, COUREUR, R3.NuméroCoureur=COUREUR.NuméroCoureur) R5=PROJECTION(R4, NomCoureur)Et en langage SQL...SELECT NomCoureur FROM COUREURWHERE NuméroCoureur NOT IN (SELECT NuméroCoureur FROM ATTRIBUER_BONIFICATION) ;ouSELECT NomCoureur FROM COUREUR C LEFT JOIN ATTRIBUER_BONIFICATION A ON C.NuméroCoureur=A.NuméroCoureurWHERE A.NuméroCoureur IS NULL ; 5 - Quels sont les noms des coureurs qui ont participé à toutes les étapes ? R1=PROJECTION(PARTICIPER, NuméroCoureur, NuméroEtape) R2=PROJECTION(ETAPE, NuméroEtape) R3=DIVISION(R1, R2) R4=JOINTURE(R3, COUREUR, R3.NuméroCoureur=COUREUR.NuméroCoureur) R5=PROJECTION(R4, NomCoureur)ouN=CALCULER(ETAPE, Comptage()) R1=REGROUPER_ET_CALCULER(PARTICIPER, NuméroCoureur, Nb:Comptage()) R2=SELECTION(R1, Nb=N) R3=JOINTURE(R2, COUREUR, R2.NuméroCoureur=COUREUR.NuméroCoureur) R4=PROJECTION(R3, NomCoureur)Et en langage SQL...SELECT NomCoureur FROM PARTICIPER A INNER JOIN COUREUR B ON A.NuméroCoureur=B.NuméroCoureurGROUP BY NuméroCoureur, NomCoureurHAVING COUNT(*)=(SELECT COUNT(*) FROM ETAPE) ;6 - Quel est le classement général des coureurs (nom, code équipe, code pays et temps des coureurs) à l'issue des 13 premières étapes sachant que les bonifications ont été
intégrées dans les temps réalisés à chaque étape ? R1=SELECTION(PARTICIPER, NuméroEtape=13) R2=PROJECTION(R1, NuméroCoureur) -> R2 représente l'ensemble des coureurs présents jusqu'à la 13ème étape (ce qui va permettre de ne pas prendre en compte dans le classement ceux qui ont abandonné avant !) R3=JOINTURE(R2, PARTICIPER, R2.NuméroCoureur=PARTICIPER.NuméroCoureur) R4=SELECTION(R3, NuméroEtape<=13) R5=REGROUPER_ET_CALCULER(R4, NuméroCoureur, Total:Somme(TempsRéalisé)) R6=JOINTURE(R5, COUREUR, R5.NuméroCoureur=COUREUR.NuméroCoureur) R7=PROJECTION(R6, NomCoureur, CodeEquipe, CodePays, Total) R8=TRI(R7, Totalé)Et en langage SQL...SELECT NomCoureur, CodeEquipe, CodePays, SUM(TempsRéalisé) AS TotalFROM PARTICIPER A INNER JOIN COUREUR B ON A.NuméroCoureur=B.NuméroCoureur WHERE NuméroEtape<=13 AND A.NuméroCoureur IN (SELECT NuméroCoureur FROM PARTICIPER WHERE NuméroEtape=13)GROUP BY A.NuméroCoureur, NomCoureur, CodeEquipe, CodePays ORDER BY 4 ;
Exercice n°1 :
Soit le modèle relationnel suivant relatif à une base de données sur des représentations
musicales :
REPRESENTATION (n°représentation, titre_représentation, lieu)
MUSICIEN (nom, n°représentation*)
PROGRAMMER (date, n°représentation*, tarif)
Remarque : les clés primaires sont soulignées et les clés étrangères
sont marquées par *
Questions :
1 - Donner la liste des titres des représentations.
2 - Donner la liste des titres des représentations ayant lieu à l'opéra Bastille.
3 - Donner la liste des noms des musiciens et des titres des représentations auxquelles ils
participent.
4 - Donner la liste des titres des représentations, les lieux et les tarifs pour la journée du
14/09/96.
Exercice n°2 :
Soit le modèle relationnel suivant relatif à la gestion simplifiée des étapes du Tour de
France 97, dont une des étapes de type "contre la montre individuel" se déroula à Saint-
Etienne :
EQUIPE(CodeEquipe, NomEquipe, DirecteurSportif)
COUREUR(NuméroCoureur, NomCoureur, CodeEquipe*, CodePays*)
PAYS(CodePays, NomPays)
TYPE_ETAPE(CodeType, LibelléType)
ETAPE(NuméroEtape, DateEtape, VilleDép, VilleArr, NbKm, CodeType*)
PARTICIPER(NuméroCoureur*, NuméroEtape*, TempsRéalisé)
ATTRIBUER_BONIFICATION(NuméroEtape*, km, Rang, NbSecondes,
NuméroCoureur*)
Remarque : les clés primaires sont soulignées et les clés étrangères sont marquées
par *
Questions :
1 - Quelle est la composition de l'équipe Festina (Numéro, nom et pays des
coureurs) ?
2 - Quel est le nombre de kilomètres total du Tour de France 97 ?
3 - Quel est le nombre de kilomètres total des étapes de type "Haute
Montagne"?
4 - Quels sont les noms des coureurs qui n'ont pas obtenu de bonifications ?
5 - Quels sont les noms des coureurs qui ont participé à toutes les étapes ?
6 - Quel est le classement général des coureurs (nom, code équipe, code pays
et temps des coureurs) à l'issue des 13 premières étapes sachant que les
bonifications ont été intégrées dans les temps réalisés à chaque étape ?
7 - Quel est le classement par équipe à l'issue des 13 premières étapes (nom et
temps des équipes) ?
Correction de l'exercice n°1
1 - Donner la liste des titres des représentations.
SELECT titre_représentation FROM REPRESENTATION ;
2 - Donner la liste des titres des représentations ayant lieu à l'opéra
Bastille.
SELECT titre_représentation FROM REPRESENTATION
WHERE lieu="Opéra Bastille" ;
3 - Donner la liste des noms des musiciens et des titres des
représentations auxquelles ils participent.
SELECT nom, titre_représentation
FROM MUSICIEN, REPRESENTATION
WHERE MUSICIEN.n°représentation = REPRESENTATION.n°représentation ;
4 - Donner la liste des titres des représentations, les lieux et les tarifs
pour la journée du 14/09/96.
SELECT titre_représentation, lieu, tarif
FROM REPRESENTATION, PROGRAMMER
WHERE PROGRAMMER.n°représentation =
REPRESENTATION.n°représentation
AND date='14/06/96' ;
Correction de l'exercice n°2
1 - Quelle est la composition de l'équipe FESTINA (Numéro, nom et
pays des coureurs) ?
SELECT NuméroCoureur, NomCoureur, NomPays
FROM EQUIPE A, COUREUR B, PAYS C
WHERE A.CodeEquipe=B.CodeEquipe And B.CodePays=C.CodePays
And NomEquipe="FESTINA" ;
2 - Quel est le nombre de kilomètres total du Tour de France 97 ?
SELECT SUM(Nbkm) FROM ETAPE ;
3 - Quel est le nombre de kilomètres total des étapes de type HAUTE MONTAGNE ?
SELECT SUM(Nbkm) FROM ETAPE A, TYPE_ETAPE B
WHERE A.CodeType=B.CodeType And LibelléType="HAUTE MONTAGNE" ;
4 - Quels sont les noms des coureurs qui n'ont pas obtenu de bonifications ?
SELECT NomCoureur FROM COUREUR
WHERE NuméroCoureur NOT IN (SELECT NuméroCoureur FROM
ATTRIBUER_BONIFICATION) ;
5 - Quels sont les noms des coureurs qui ont participé à toutes les étapes ?
SELECT NomCoureur FROM PARTICIPER A, COUREUR B
WHERE A.NuméroCoureur=B.NuméroCoureur
GROUP BY NuméroCoureur, NomCoureur
HAVING COUNT(*)=(SELECT COUNT(*) FROM ETAPE) ;
6 - Quel est le classement général des coureurs (nom, code équipe,
code pays et temps des coureurs) à l'issue des 13 premières étapes
sachant que les bonifications ont été intégrées dans les temps réalisés
à chaque étape ?
SELECT NomCoureur, CodeEquipe, CodePays, SUM(TempsRéalisé) AS Total
FROM PARTICIPER A, COUREUR B
WHERE A.NuméroCoureur=B.NuméroCoureur and NuméroEtape<=13
GROUP BY A.NuméroCoureur, NomCoureur, CodeEquipe, CodePays
ORDER BY Total;
7 - Quel est le classement par équipe à l'issue des 13 premières étapes
(nom et temps des équipes) ?
SELECT NomEquipe, SUM(TempsRéalisé) AS Total FROM PARTICIPER A, COUREUR B, EQUIPE C WHERE A.NuméroCoureur=B.NuméroCoureur And B.CodeEquipe=C.CodeEquipe And NuméroEtape<=13 GROUP BY B.CodeEquipe, NomEquipe ORDER BY Total;