Vous êtes sur la page 1sur 5

1 Exercice n1 Soit le modle relationnel suivant relatif une base de donnes sur des reprsentations musicales : REPRESENTATION (nreprsentation,

, titre_reprsentation, lieu) MUSICIEN (nom, nreprsentation*) PROGRAMMER (date, nreprsentation*, tarif) Remarque : les cls primaires sont soulignes et les cls trangres sont marques par * Questions : 1 - Donner la liste des titres des reprsentations. 2 - Donner la liste des titres des reprsentations ayant lieu l'opra Bastille. 3 - Donner la liste des noms des musiciens et des titres des reprsentations auxquelles ils participent. 4 - Donner la liste des titres des reprsentations, les lieux et les tarifs pour la 2 Correction de l'exercice n1 1 - Donner la liste des titres des reprsentations. SELECT titre_reprsentation FROM REPRESENTATION ; 2 - Donner la liste des titres des reprsentations ayant lieu l'opra Bastille. SELECT titre_reprsentation FROM REPRESENTATION WHERE lieu="Opra Bastille" ; 3 - Donner la liste des noms des musiciens et des titres des reprsentations auxquelles ils participent. SELECT nom, titre_reprsentation FROM MUSICIEN, REPRESENTATION WHERE MUSICIEN.nreprsentation = REPRESENTATION.nreprsentation ; 4 - Donner la liste des titres des reprsentations, les lieux et les tarifs pour la journe du 14/09/96. SELECT titre_reprsentation, lieu, tarif FROM REPRESENTATION, PROGRAMMER WHERE PROGRAMMER.nreprsentation = REPRESENTATION.nreprsentation AND date='14/06/96' ; Exercice n2 Soit le modle relationnel suivant relatif la gestion des notes annuelles d'une promotion d'tudiants : ETUDIANT(NEtudiant, Nom, Prnom) MATIERE(CodeMat, LibellMat, CoeffMat) EVALUER(NEtudiant*, CodeMat*, Date, Note) Remarque : les cls primaires sont soulignes et les cls trangres sont marques par * Questions : 1 - Quel est le nombre total d'tudiants ? 2 - Quelles sont, parmi l'ensemble des notes, la note la plus haute et la note la plus basse ? 3 - Quelles sont les moyennes de chaque tudiant dans chacune des matires ?

4 - Quelles sont les moyennes par matire ? On utilisera la requte de la question 3 comme table source 5 - Quelle est la moyenne gnrale de chaque tudiant ? On utilisera la requte de la question 3 comme table source 6 - Quelle est la moyenne gnrale de la promotion ? On utilisera la requte de la question 5 comme table source 7 - Quels sont les tudiants qui ont une moyenne gnrale suprieure ou gale la moyenne gnrale de la promotion ? On utilisera la requte de la question 5 comme table source 4 Correction de l'exercice n2 1 - Quel est le nombre total d'tudiants ? SELECT COUNT(*) FROM ETUDIANT ; 2 - Quelles sont, parmi l'ensemble des notes, la note la plus haute et la note la plus basse ? SELECT MIN(Note), MAX(Note) FROM EVALUER ; 3 - Quelles sont les moyennes de chaque tudiant dans chacune des matires? SELECT ETUDIANT.NEtudiant, Nom, Prnom, LibellMat, CoeffMat, AVG(Note) AS MoyEtuMat FROM EVALUER, MATIERE, ETUDIANT WHERE EVALUER.CodeMat = MATIERE.CodeMat AND EVALUER.NEtudiant = ETUDIANT.NEtudiant GROUP BY ETUDIANT.NEtudiant, Nom, Prnom, LibellMat, CoeffMat; 4 - Quelles sont les moyennes par matire ? SELECT LibellMat, AVG(MoyEtuMat) FROM MOYETUMAT GROUP BY LibellMat ; 5 - Quelle est la moyenne gnrale de chaque tudiant ? SELECT NEtudiant, Nom, Prnom, SUM(MoyEtuMat*CoeffMat)/SUM(CoeffMat) AS MgEtu FROM MOYETUMAT GROUP BY NEtudiant, Nom, Prnom ; 6 - Quelle est la moyenne gnrale de la promotion ? Avec la vue MGETU de la question 5 : SELECT AVG(MgEtu) FROM MGETU ; 7 - Quels sont les tudiants qui ont une moyenne gnrale suprieure ou gale la moyenne gnrale de la promotion ? Avec la vue MGETU de la question 5 : SELECT NEtudiant, Nom, Prnom, MgEtu FROM MGETU WHERE MgEtu >= (SELECT AVG(MgEtu) FROM MGETU) ; Exercice n3 Soit le modle relationnel suivant relatif la gestion simplifie des tapes du Tour de France 97, dont une des tapes de type "contre la montre individuel" se droula Saint-Etienne : EQUIPE(CodeEquipe, NomEquipe, DirecteurSportif) COUREUR(NumroCoureur, NomCoureur, CodeEquipe*, CodePays*)

PAYS(CodePays, NomPays) TYPE_ETAPE(CodeType, LibellType) ETAPE(NumroEtape, DateEtape, VilleDp, VilleArr, NbKm, CodeType*) PARTICIPER(NumroCoureur*, NumroEtape*, TempsRalis) ATTRIBUER_BONIFICATION(NumroEtape*, km, Rang, NbSecondes, NumroCoureur*) Remarque : les cls primaires sont soulignes et les cls trangres sont marques par * Questions : 1 - Quelle est la composition de l'quipe Festina (Numro, nom et pays des coureurs) ? 2 - Quel est le nombre de kilomtres total du Tour de France 97 ? 3 - Quel est le nombre de kilomtres 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 gnral des coureurs (nom, code quipe, code pays et temps des coureurs) l'issue des 13 premires tapes sachant que les bonifications ont t intgres dans les temps raliss chaque tape ? 7 - Quel est le classement par quipe l'issue des 13 premires tapes (nom et temps des quipes) ? COPEMED - Formation SGBD - ACCESS Tunis, 25 septembre 2 octobre 2001 6 Correction de l'exercice n3 1 - Quelle est la composition de l'quipe FESTINA (Numro, nom et pays des coureurs) ? SELECT NumroCoureur, 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 kilomtres total du Tour de France 97 ? SELECT SUM(Nbkm) FROM ETAPE ; 3 - Quel est le nombre de kilomtres total des tapes de type HAUTE MONTAGNE ? SELECT SUM(Nbkm) FROM ETAPE A, TYPE_ETAPE B WHERE A.CodeType=B.CodeType And LibellType="HAUTE MONTAGNE" ; 4 - Quels sont les noms des coureurs qui n'ont pas obtenu de bonifications ? SELECT NomCoureur FROM COUREUR WHERE NumroCoureur NOT IN (SELECT NumroCoureur 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.NumroCoureur=B.NumroCoureur GROUP BY NumroCoureur, NomCoureur HAVING COUNT(*)=(SELECT COUNT(*) FROM ETAPE) ; 6 - Quel est le classement gnral des coureurs (nom, code quipe, code pays et temps des coureurs) l'issue des 13 premires tapes sachant que les bonifications ont t intgres dans les temps raliss chaque tape ? SELECT NomCoureur, CodeEquipe, CodePays, SUM(TempsRalis) AS Total FROM PARTICIPER A, COUREUR B

WHERE A.NumroCoureur=B.NumroCoureur and NumroEtape<=13 GROUP BY A.NumroCoureur, NomCoureur, CodeEquipe, CodePays ORDER BY Total; 7 - Quel est le classement par quipe l'issue des 13 premires tapes (nom et temps des quipes) ? SELECT NomEquipe, SUM(TempsRalis) AS Total FROM PARTICIPER A, COUREUR B, EQUIPE C WHERE A.NumroCoureur=B.NumroCoureur And B.CodeEquipe=C.CodeEquipe And NumroEtape<=13 GROUP BY B.CodeEquipe, NomEquipe ORDER BY Total;

Pour crer un exemple de procdure stocke


1. Dans l'Explorateur d'objets, connectez-vous une instance du moteur de base de donnes et dveloppez-la. 2. Dveloppez Bases de donnes, la base de donnes AdventureWorks2008R2, puis Programmabilit. 3. Cliquez avec le bouton droit sur Procdures stockes, puis cliquez sur Nouvelle procdure stocke. 4. Dans le menu Requte, cliquez sur Spcifier les valeurs des paramtres de modle. 5. Dans la bote de dialogue Spcifier des valeurs pour les paramtres de modle, entrez les valeurs ci-dessous pour les paramtres affichs. Paramtre Valeur Auteur Votre nom Date de cration Date du jour Description Retourne des donnes sur les employs. Procedure_name HumanResources.uspGetEmployees @Param1 @LastName @Datatype_For_Param1 nvarchar (50) Default_Value_For_Param1 NULL @Param2 @FirstName @Datatype_For_Param2 nvarchar (50) Default_Value_For_Param2 NULL 6. Cliquez sur OK. 7. Dans l'diteur de requtes, remplacez l'instruction SELECT par l'instruction suivante :

SELECT FirstName, LastName, JobTitle, Department FROM HumanResources.vEmployeeDepartment WHERE FirstName = @FirstName AND LastName = @LastName;

8. Pour tester la syntaxe, dans le menu Requte, cliquez sur Analyser. Si un message d'erreur est retourn, comparez les instructions avec les informations ci-dessus et apportez les corrections ncessaires. 9. Pour crer la procdure stocke, dans le menu Requte, cliquez sur Excuter.

10. Pour enregistrer le script, dans le menu Fichier, cliquez sur Enregistrer. Entrez un nouveau nom de fichier, puis cliquez sur Enregistrer. 11. Pour excuter la procdure stocke, dans la barre d'outils, cliquez sur Nouvelle requte. 12. Dans la fentre de requte, entrez les instructions suivantes :

USE AdventureWorks2008R2; GO EXECUTE HumanResources.uspGetEmployees @FirstName = N'Diane', @LastName = N'Margheim'; GO

13. Dans le menu Requte, cliquez sur Excuter.