Vous êtes sur la page 1sur 11

Création des tables 

:
Table DIVISIONS et TABLE EQUIPES : 

Figure 1

Figure 2

Figure 3
Table JOUEURS :

 Figure 4

Table MATCHS :

 Figure 5

1
Table STASTIQUES :

 Figure 6

2. Pour la table STATISTIQUES, faire en sorte que (numMatch, numJoueur) soit clé primaire. (Clé
primaire composée

Pour que (numMatch, numJoueur) soit des clé primaire on doit modifier la table en utilisant la
requete alter table Statistiques et on va ajouter la contrainte du cle primaire «  add constranint
nom_choisi primary key (nummatch,numjoueur) »

 Figure 7

3. Pour la table EQUIPES ajouter une contrainte de Foreign KEY sur la colonne codeDiv. CodeDiv
doit faire référence à CodeDiv de la table Divisions

Du même pour ajouter un cle etrangere au table EQUIPES on va modifier notre table on
ajoutant une contrainte de cle etranger  ensuite on va faire references au codeDiv existant
dans la table Divisions « alter table EQUIPES add foreign key (codeDiv) references
Divisions(codeDiv) »

 Figure 8

2
4. Modifier la table Joueurs et faire en sorte que nom soit not null :

Pour rendre le nom dans la table Joueurs non null on va modifier la table Joueurs et on va declarer
nom comme not null « alter table Joueurs modify nom varchar2(30) not null »

 Figure 9

5. Modifier la table Divisions, et faire en sorte que nomDiv soit not null :

Pour rendre nom div non null on va utiliser la requête suivante « alter table DIVISIONS modify
nomDiv varchar2(40) not null »

 Figure 10

Création dans les tables :


Table DIVISIONS :

 Figure 11

3
TABLE EQUIPES :

 Figure 11

Table JOUEURS :

 Figure 12

4
Table MATCHS :

 Figure 13

7. Écrire une requête qui affiche les joueurs (nom et prénom) qui ont leur salaire plus élevé que la
moyenne des salaires des joueurs des Canadiens de Montréal. (Utiliser le nom de l’équipe) :

Pour afficher Le nom et prénom de ces joueurs on va sélecter le nom et prénom du table joueurs puis
on va faire une jointure entre la table joueurs et la table équipes ensuite on va préciser notre
condition « where j.salaire>(select avg(j.salaire) from joueurs j where e.nomequipe= ‘ nom d’equipes
choisi’»

Figure 14

8. Écrire la requête qui supprime les joueurs qui ne sont dans aucune équipe. (Ne pas supprimer)

Pour supprimer les joueurs qui n’ont pas d’équipes on utilise la requête : « delete Joueurs where
codeEquipe is null »

Figure 15

5
9. Écrire une requête qui affiche la liste des joueurs (numjoueur, nom, prenom) qui n’ont aucun
point (ni buts, ni passes) et qui ne sont pas des Gardiens :

Pour les afficher on va utiliser la requete « select j.nom j.prenom from joueurs j inner join on
statistiques s j.nomjoueur=s.numjoueur where(nbbuts is null and nbpasses is null) »

Explication :

-Donc on a recuperer le nom et le prenom de la table joueurs puis on va faire une jointure entre
table joueurs et statistiques sur la colonne codeequipe pour lier les donnes de deux table ensuite on
preciser notre condition avec la clause where.

Figure 16
Justification :

Dans notre cas on a comme résultat sauf le joueur ‘Price’ car comme il est présent dans les
figures ci-dessous sauf le joueur du numéro 1 qui n’a marqué aucun but et il n’a effectué
aucune passe.

Figure 17

Figure 18

6
10. Afficher le nom des équipes qui ont les joueurs avec le plus bas salaire :

Pour afficher ces équipes on utilise la requête « select e.nomequipe from equipes inner join joueurs j
on e.codeequipe=j.codeequipe where j.salaire=(select min(j.salaire) from joueurs) »

Explication :

-Donc on a recuperer le nom d’equipe de la table Equipes puis on va faire une jointure entre table
equipes et joueurs sur la colonne codeequipe pour lier les donnes de deux table ensuite on preciser
notre condition avec la clause where et deans cette condition on va recuperer le min des salaire avec
la fonction min

Figure 19

11. Afficher le nom de l’équipe, la masse salariale (la somme des salaires) des équipes ayant la plus
basse masse salariale. Par masse salariale, on entend la somme des salaires de l’ensemble des
joueurs :

Pour afficher le nom d’équipes ayant la masse salariale la plus faible on va utiliser la requête
suivante : « Select e.nomequipe , sum(j.salaire ) as masse salariale from equipes e inner join joueurs j
on e.codeequipe=j.codeequipe group by e.nomequipe having sum(j.salaire)= (SELECT
MIN(masse_salariale) FROM (SELECT SUM(j2.salaire) AS masse_salariale FROM joueurs j2 GROUP BY
j2.codeequipe) )»

Explication :

Donc on va récupérer le nom d’équipe et la masse salariale qu’on va calculer en faisant l’addition
entre le salaire des joueurs de chaque équipe donc on a utilisé la fonction sum puis on va stocker
cette valeur dans la variable masse_salariale en utilisant l’alias as ensuite on va créer une jointure
entre la table équipes et joueurs sur la colonne codeequipe pour lies les données des deux tables
ensuite on utilise la clause GROUYP BY pour regrouper les données par nom d’équipe du coup on va
obtenir la somme des salaires des joueurs de chaque équipe puis en utilise la clause HAVING pour
filtrer les resultats et afficher juste l’equipe qui a la masse salariale la plus faible donc on a utiliser la
fonction min .

Figure 20

7
Justification :

Et pour résultat on a trouvé aucun ligne sélectionnée et qui semble impossible donc pour
s’assurer on va exécuter la requête suivante pour calculer la min des masses
salariale « SELECT MIN(masse_salariale) FROM (SELECT SUM(salaire) AS masse_salariale
FROM joueurs GROUP BY codeequipe) »

Figure 21
Et d’après la figure 21 on constate que la min des masses salariale est : 250000 ensuite on va
afficher pour chaque équipe la masse salariale :

Figure 22

Figure 23
Et comme il est présenté dans le figure 22 et 23 l’équipe qui a la masse la plus faible a code
équipe null c’est pour cela on a trouvé le résultat présenté dans la figure 20.

8
12. Écrire une requête qui affiche le nom, le prénom et le numéro du match des joueurs ayant
marqué des points lors des matchs contre Les Maple Leafs :

Pour afficher le nom, le prénom et le numéro ces joueurs on utilise la requête :

« select j.nom,j.prenom,s.match from joueurs j

Inner join statistiques s on j.numjoueur=s.numjoueur

Inner join matchs m s.nummatch=m.nummatch

Inner join equips e on (m.codeequipev=e.codeequipe or m.codeequiper=e.codeequipe

Where s.nbbuts>0 and e.nomequipe=’les Maple leafs ’»

Explication :

Pour afficher ces joueurs on doit utiliser une jointure entre les tables statistiques et joueurs pour liés
les donnes de chaque joueur à ces statistiques puis on utilise une autre jointure entre les tables
statistiques et matchs pour liés les statistiques de chaque joueur au match qu’il a joué enfin on
effectue la dernière jointure entre les tables matchs et equipes pour liés chaque match aux deux
equipes concernées.

Figure 24

9
13. Dans combien de matchs a marqué le joueur Drouin ? (Écrire la requête). Afficher le nom du
joueur ainsi que le nombre de matchs :

Pour afficher le nombre de match ou le joueur ‘Drouin’ a marqué on utilise la commande «

 Select j.nom,count(distinct s.nummatch) as nbmatchs

From joueurs j join statistiques s on j.numjoueur =s.numjoueur

where j.nom=’Drouin’ and s.nbbuts group by j.nom »

Explication :

On sélectionne du table joueurs le nom et on utilise la fonction count(Distinct) pour compter le


numéro de match joué par chaque joueur ensuite on stocke le résultat dans la variable nbmatchs
ensuite on crée une jointure entre la tables joueurs quand la fait référence par j et la table
statistiques quand la fait référence par s pour lier les donnes des deux tables sur la colonne
numjoueur ensuite on précise notre condition et enfin en utilise la clause GROUP BY pour regrouper
les résultats par nom de joueur.

Figure 25

10
14. Écrire la requête qui qui affiche le nom, le total des points des joueurs ayant le total des points
inférieur à celui de Anderson Josh :

Pour afficher le nom et le total des point de ces joueurs on utilise la commande suivante «

 SELECT j.nom, SUM(m.scoreV) AS TOTALPOINTS

FROM joueurs j

INNER JOIN statistiques s ON s.numJoueur = j.numJoueur

INNER JOIN matchs m ON m.numMatch = s.numMatch

WHERE j.nom <> 'Anderson'

GROUP BY j.nom

HAVING SUM(m.scoreV) < (SELECT SUM(scoreV) FROM joueurs j2

INNER JOIN statistiques s2 ON s2.numJoueur = j2.numJoueur

INNER JOIN matchs m2 ON m2.numMatch = s2.numMatch

WHERE j2.nom = 'Anderson')»

Figure 26

11

Vous aimerez peut-être aussi