Vous êtes sur la page 1sur 12

Ouidade Laura Ouanam Malle Chaptal Assmae Yasser

PROJET DE BASE DE DONNEES : BASE DE STAGES A POLYTRUC

Promotion 2011-2012 Troisime anne

Introduction :
On souhaite modliser la base de stages obligatoires faits par les tudiants de lcole Polytruc. A partir de la modlisation relationnelle, nous allons exprimer en SQL plusieurs requtes.

Organisation du travail :
La premire tape de ce projet consiste en llaboration du schma entit-association. Nous lavons ralis chacune de notre ct, puis par la suite nous nous sommes concertes afin de comparer nos rsultats, et lever nos incomprhensions. Ce travail a t une tape primordiale de notre projet, car il nous a permit de nous familiariser avec le sujet. La deuxime tape consiste analyser les schmas entit-association et relationnel donns par lenseignant afin de visualiser la base de donnes. Ensuite nous nous sommes runis, plusieurs reprises, afin de travailler la recherche de toutes les requtes. Cela nous a permit de mettre en commun nos ides, de pouvoir sentraider pour les requtes incomprises et de voir diffrentes approches dans la signification des requtes demandes. Nous avons ralis ensemble le compte rendu afin de confirmer notre comprhension dans cette tude.

Requte SQL: 2) Les stages faits en 2010 en rgion parisienne :


2

SELECT DISTINCT numStage,nomIns FROM StageSout,Adresse WHERE StageSout.idadrLieu=Adresse.idAd AND annee LIKE '2010' AND (cp LIKE '91%' OR cp LIKE '92%' OR cp LIKE '93%' OR cp LIKE '94%' OR cp LIKE '75%' OR cp LIKE '78%') ; Rsultats: numStage
1 2 100 101 101 101 101 102 102 103 120 130

nomIns
LIPN LIPN PSA UMPC CORIOLIS ECOLE POLYTECHNIQUE UNIVERSITE PARIS SUD CEA SACLAY ECOLE POLYTECHNIQUE INSTITUT DE PHYSIQUE NUCLEAIRE MAX PLANCK PHYSITRON GERMANY

Commentaires :
On joint les tables StageSout et Adresse avec comme condition de jointure ladresse du lieu du stage. On slectionne dans le rsultat de cette jointure les stages dont lannee est 2010, (AND) et qui ont eu lieu en rgion parisienne. Dans la clause WHERE,on slectionne les cp commenant par 91 ou 92 ou 93 ou 94 ou 75 ou 78, pour cela on utilise le caractre joker % . Nous utilisons le DISTINCT pour viter les doublons du couple numStage/nomIns.

Difficults rencontres :
On a dabord crit la requte avec = la place de LIKE et sans parenthse autour de la condition concernant les codes postaux. SQL nous renvoyait un message derreur.

4) Le nom des tudiants dont la soutenance a lieu le 25 mai 2010 :


SELECT nom FROM Etudiant,StageSout WHERE Etudiant.numEtu=StageSout.numEtu AND dateSout LIKE '2010-05-25' ; Rsultats:
Nom Chicane Sollin

Commentaires :
On ralise une jointure entre les tables Etudiant et StageSout avec comme condition de jointure le numro tudiant. Ensuite on slectionne les noms des tudiants qui ont effectu une soutenance la date donne. Le Distinct est ici inutile, car un tudiant ne peut passer quune soutenance par jour.

5) Les tudiants ayant effectu au moins 2 stages dans la mme entreprise ou dans le mme
laboratoire:

SELECT Etudiant.numEtu,Etudiant.nom FROM Etudiant,Institut,StageSout WHERE StageSout.nomIns=Institut.nomIns AND StageSout.numEtu=Etudiant.numEtu GROUP BY Etudiant.numEtu,Institut.nomIns,Etudiant.nom HAVING COUNT ((numStage,StageSout.nomIns))>=2 ; Rsultats: numEtu 111 55 Nom Gerard Finesse Commentaires :
On commence par faire une jointure entre les tables Etudiant, Institut et StageSout avec deux conditions, dont lune est que le numro tudiant soit identique et lautre que le nom de linstitut soit le mme. Ensuite, on regroupe les instances par et on finit par calculer pour chaque numro tudiant, le nombre de stages effectus. On ne slectionnera que ceux suprieur ou gal deux.

Difficults rencontres :
Initialement on avait pens crire le couple de cls de stageSout qui est (numStage,nomIns) dans le COUNT mais la requte ne fonctionnait pas car nous navions pas mis une double parenthse.

6) Le nombre moyen de membres dun jury :


SELECT AVG(N1) FROM (SELECT COUNT (emailMembre) AS N1 FROM MembreJury GROUP BY numJ) AS N2;

Rsultats:
AVG 3.200000

Commentaires :
Il sagit dune requte imbriqu. On compte le nombre de membre laide de linstance emailMembre dans la table MembreJury que lon regroupe en fonction du numro de jury. On utilise des alias pour simplifier lcriture.

Difficults rencontres :
Nous avons eu quelques difficults utiliser lalias (AS) car on ignorait quil en fallait un aussi pour renommer tout ce qui se trouve dans le FROM.

8) Le laboratoire ayant accueilli le plus de stagiaire toutes annes confondues :


SELECT Laboratoire.nomIns FROM Laboratoire,StageSout
4

WHERE Laboratoire.nomIns=StageSout.nomIns GROUP BY Laboratoire.nomIns ORDER BY COUNT ((numStage,StageSout.nomIns)) DESC LIMIT 1; nomIns Rsultats:
CEA SACLAY

Commentaires :
On ralise une jointure entre les tables Laboratoire et StageSout. On regroupe (GROUP BY) ensuite les laboratoires par nom et on les classe selon le nombre de stage effectu ( partir du numro de stage : COUNT (numStage)) par ordre dcroissant (ORDER BY DESC) en ne gardant que le premier (LIMIT 1). Cependant on sait quen cas dgalit cette requte ne fonctionne, cest pour cela que nous avions list au pralable le nom des Laboratoires ainsi que le nombre de stagiaires par ordre dcroissant des dix premiers. Remarque : On aurait pu compter le nombre de stage effectu partir du numro tudiant ; on obtient exactement le mme rsultat.

9) Les entreprises proposant des stages de tous les niveaux possible existant dans la base :
SELECT StageSout.nomIns FROM StageSout, Entreprise WHERE Entreprise.nomIns = StageSout.nomIns GROUP BY StageSout.nomIns HAVING COUNT (DISTINCT niveau)=(SELECT COUNT (DISTINCT niveau) FROM StageSout); Rsultats: AUCUN RESULTAT! Commentaires :
On ralise une jointure entre Entreprise et StageSout. On va regrouper les champs par le nom de lentreprise (GROUP BY).On compte par entreprise le nombre de niveau quil possde (HAVING) en les distinguant (COUNT(DISTINCT niveau)) .

10) La date laquelle il y a eu le plus de soutenance :


SELECT dateSout FROM StageSout
5

GROUP BY dateSout ORDER BY COUNT((numStage,nomIns)) DESC LIMIT 1; Rsultats:


dateSout

Commentaires :
On liste les stages en fonction de leur date de soutenance. Ensuite on classe les dates selon le nombre de stage effectu par ordre dcroissant (ORDER BY DESC).Pour finir on ne garde que la premire date (LIMIT 1). Remarque : on na pas eu besoin dutiliser un distinct car on est bien conscient que pour un mme stage, il y a plusieurs entreprises ou laboratoires possible.

2010-06-28

11) La liste des entreprises en fonction de leur chiffre daffaires par ordre croissant :
SELECT nomIns,chiffre FROM Entreprise ORDER BY chiffre; Rsultats:
nomIns FFB MARVEL PRODS LHA GLENAT GAMEDUELL PHYSITRON GERMANY LAVAZZA SIEMENS France PSA Chiffre 20000 37400 66600 89400 2000001 2500000 20000012 3200000000 240000000000

Commentaires :
On slectionne dans la table Entreprise, le nom de lentreprise et son chiffre daffaire. Ensuite on classe par ordre croissant les chiffres daffaires.

12) La troisime entreprise dans la liste prcdente :


(SELECT nomIns,chiffre FROM Entreprise
6

ORDER BY chiffre LIMIT 3) EXCEPT (SELECT nomIns,chiffre FROM Entreprise ORDER BY chiffre LIMIT 2); Rsultats:
nomIns Chiffre

LHA

66600

Commentaires :
Le principe de cette requte est dans une premier temps ,de slectionner les trois premiers de la liste, puis denlever les deux premiers. On va dabord lister comme dans la requte prcdente tout en gardant que les trois premiers. Ensuite on retire les deux premires laide de lexclusion (EXCEPT). Remarque : on a bien fait attention avoir le mme nombre de colonne pour utiliser EXCEPT. De plus, on a veill ce quil ny ait pas dgalit entre le chiffre daffaires des trois premires entreprises en les listant. On peut ainsi utiliser LIMIT sans problme.

13) Les tuteurs acadmique qui sont galement tuteurs-pro pour dautres stage :
SELECT nom, prenom FROM Tuteur WHERE Tuteur.email IN (SELECT DISTINCT S1.tutaca FROM StageSout AS S1,StageSout AS S2 WHERE S1.numStage!=S2.numStage AND S1.nomIns!=S2.nomIns AND S1.tutaca=S2.tuteurpro ) ;

Rsultats:
Nom BOUTOUI KIB Prenom DOMINIQUE COLIN

Commentaires :
On renvoie en premier lieu, lemail des tuteurs acadmiques qui sont galement tuteur pro pour dautres stages.Cest le rsultat de la jointure 7

de la table StageSout avec elle-mme conditionne par le fait que le numro de stage et le nom de linstitut doivent tre diffrent. On slectionne les noms et prnoms des tuteurs dont lemail se trouve dans la table rsultante de la sous requte explique prcdemment.

Difficults rencontres : Dans un premier temps, on a utilis un = avant la sous requte. Or on ne peut pas comparer une instance avec une table. Une fois ceci comprit nous avons utiliss IN.

14) Le nombre de stage ayant la mme composition de jury :


SELECT SUM(nombredeStage) FROM ( SELECT stageSout.numJ, COUNT((stageSout.numStage, stageSout.nomIns)) AS nombredeStage FROM stageSout GROUP BY stageSout.numJ HAVING COUNT((stageSout.numStage, stageSout.nomIns))>1)AS N2; Rsultats:
On a regroup par numro de jury les lignes de la tables stageSout grce un GROUP BY. Puis on a compt pour chaque numro de jury le nombre de stage quil avait jug (COUNT). On a conserv que ceux qui en ont jug plus dun. Nous avons renomm le rsultat du COUNT sous nombredeStage. Enfin nous avons utiliss loprateur SUM afin de sommer les nombres de stages obtenus.

Sum 30

Commentaires :

Difficults rencontres :
Nous ne savions pas si lon devait obtenir le nombre de stage total pour lesquels le jury ntait pas unique ou si lon devait obtenir une table avec pour chaque jury le nombre de stage jug par celui-ci. Aprs explication, nous avons gard le rsultat obtenu par la premire interprtation.

15) On sintresse au nombre de jury o monsieur Dupont a assist en ntant pas le tuteur
acadmique du stage en question : SELECT COUNT(S1) FROM ( (SELECT numJ AS S1 FROM StageSout WHERE tutaca!=(SELECT email FROM Tuteur WHERE nom LIKE 'Dupont')) INTERSECT (SELECT numJ AS S2 FROM MembreJury WHERE emailMembre LIKE (SELECT email FROM Tuteur WHERE nom LIKE 'Dupont')) )AS S3; Rsultats:
Count 2

Commentaires :
On a dabord renvoy les numros de jury des stages qui nont pas monsieur Dupont comme tuteur 8

acadmique. Puis nous avons renvoy les numros de jury ayant pour membre monsieur Dupont. Nous avons ensuite fait une intersection (INTERSECT) des deux afin de remplir les deux conditions souhaites. Enfin on a compt (COUNT) le nombre de jurys obtenus. Remarque : Avant toute chose on a vrifi quil existait bien quune seule personne portant le nom de Dupont.

Difficults rencontres :
On na pas compris comment faire un alias dintersection jusqu ce quon remarque que la table obtenue aprs lintersection portait le nom de la premire sous requte.

16) Les tudiants qui ont soutenu devant le jury ayant le plus de membres :
SELECT DISTINCT(Etudiant.nom) FROM Etudiant,StageSout WHERE Etudiant.numEtu=StageSout.numEtu AND StageSout.numJ LIKE ( SELECT numJ FROM MembreJury GROUP BY numJ ORDER BY COUNT(emailMembre) DESC LIMIT 1) ; Rsultats:
Nom Finesse

Commentaires :
On a dabord cherch le jury ayant le plus de membre en comptant le nombre demail pour chaque jury. Puis on a list les noms dtudiants ayant soutenu devant ce jury. Pour cela on a fait une jointure entre Etudiant et StageSout avec pour condition que le numro tudiant soit le mme pour Etudiant et StageSout et que le numro de jury soit celui de la recherche prcdente. Remarque: L encore on a vrifi le bon emploi de LIMIT.

17) Lentreprise ayant propos le moins de stage en 2010 :


SELECT Entreprise.nomIns, COUNT((numStage, stageSout.nomIns)) FROM Entreprise,StageSout WHERE StageSout.nomIns=Entreprise.nomIns AND annee='2010'
9

GROUP BY Entreprise.nomIns HAVING COUNT((numStage,stageSout.nomIns))<=ALL( SELECT COUNT((numStage, stageSout.nomIns)) FROM Entreprise,StageSout WHERE StageSout.nomIns=Entreprise.nomIns AND annee=2010 GROUP BY Entreprise.nomIns); Rsultats:
nomIns PHYSITRON GERMANY MARVEL PRODS PSA SIEMENS France count 1 1 1 1

Commentaires :
On slectionne, dans une sous requte, le nombre de stages que chaque entreprise a propos en 2010. Ensuite on fait une deuxime requte qui garde le nom des entreprises qui ont propos un nombre de stage infrieur ou gale tous les nombres rsultants de la sous requte expliqu prcdemment. Notons ici que le = , devant le ALL, a toute son importance, car si on lomet il ny a pas de rsultat.

18) Lanne pendant laquelle les entreprises ont propos le moins de stages :
SELECT annee FROM StageSout, Entreprise WHERE StageSout.nomIns=Entreprise.nomIns GROUP BY annee HAVING COUNT((numStage,stageSout.nomIns))<=ALL ( SELECT COUNT((numStage,stageSout.nomIns)) FROM StageSout, Entreprise WHERE StageSout.nomIns=Entreprise.nomIns GROUP BY annee); Rsultats:
annee 2010 2008

Commentaires :
On slectionne, dans la sous requte, le nombre de stages raliss par anne. Ensuite on garde les annes qui ont un nombre de stages infrieur ou gal tous les nombres rsultants de la sous requte expliqu prcdemment.

20) Linstitut qui a propos le plus de stages de niveau BAC+3 toutes annes confondues :
SELECT nomIns, COUNT((numStage,stageSout.nomIns)) FROM StageSout WHERE niveau LIKE 'BAC+3' GROUP BY nomIns HAVING COUNT(numStage) >= ALL (
10

SELECT COUNT((numStage,stageSout.nomIns)) FROM StageSout WHERE niveau LIKE 'BAC+3' GROUP BY nomIns ) ; Rsultats:
nomIns LIPN LHA UNIVERSITE PARIS SUD Count 2 2 2

Commentaires :
On slectionne, dans la sous requte, le nombre de stages de niveau BAC+3, raliss dans chaque institut. Ensuite on garde les noms des instituts et le nombre de stages quils ont propos, tant que ce dernier est suprieur ou gal tous les nombres rsultants de la sous requte expliqu prcdemment.

21) Les stages qui nont pas t effectus au mme endroit que ladresse de linstitut qui la
propos : SELECT numStage, StageSout.nomIns FROM Institut,StageSout WHERE Institut.nomIns=StageSout.nomIns AND Institut.idAd != StageSout.idadrLieu ; Rsultats:
numStage 3016 3010 3008 3015 3012 3011 3003 3014 3013 3005 3002 3001 3000 3009 3007 3006 3004 104 104 104 nomIns Jump Research Jump Research Glenat LHA LHA LHA LHA Soleil Labs Soleil Labs Soleil Labs Soleil Labs Marvel Prods Marvel Prods Image Labs Image Labs Image Labs Image Labs Institut de Physique nucleaire UPMC CEA Saclay numStage 4 3 nomIns LIPN GameDuell

Commentaires : On fait une jointure entre les tables Institut et StageSout avec pour condition que le nom de linstitut soit le mme. On renvoie les stages (numro et nom de linstitut) pour lesquels ladresse de linstitut est diffrente de ladresse du stage.

Conclusion :

Ce projet de Base de Donnes a t pour nous trs bnfique. Dune part il nous a permis deffectuer un travail de groupe ce qui est primordial dans notre formation dingnieur car nous serons trs souvent amenes conduire un projet en quipe. De plus, cela nous a permis dapprofondir nos connaissances en Base de Donnes et nous confronter des problmes plus complexes que ceux abords en cours.

11

12

Vous aimerez peut-être aussi