Vous êtes sur la page 1sur 10

Exercice 3 : « suite Centre de Formation »

1. Créer une base de données : « Centre formation »


2. Créer les tables depuis le MLD : « Centre de Formation » (Ne pas oublier les clés primaires et
étrangères)

3. Ajouter une contrainte NOT NULL sur la colonne typeCours de la table Inscription
4. Ajouter une contrainte CHECK dans la table SESSION : dateFin doit être toujours supérieure à
dateDebut.
5. Ajouter une colonne « Active » sur la table SPECIALITE.

NB : Cette colonne est un flag qui prend la valeur 1 si la spécialité est active, et 0 si elle ne l’est pas.

6. Dans le schéma « centreformation », insérer les données suivantes dans les tables correspondantes
en utilisant la commande « INSERT »

P a g e 1 | 10
Ecrire et exécuter les requêtes qui permettent d’effectuer les modifications suivantes :

7. Dans la table ETUDIANT, modifier les données de la colonne « niveauEtu » comme suit :

8. Renommer le titre de la formation 11 avec « développement Java »


9. Ajouter une colonne « numInscription » dans la table INSCRIPTION. La valeur de cette colonne sera la
concaténation du codeSess et numCINEtu. (Utiliser la fonction concat())
10. Modifier l’étudiant dont le nom est « Alami », sa date de naissance est le 02 Janvier 1987, et il est de la
ville de Kenitra.
11. L’étudiante Aicha souhaite rendre tous ses cours en distanciel.
12. Consulter le contenu de toutes les tables du schéma « CentreFormation »
13. Donner la liste des étudiants qui sont de la ville de Tanger.
14. Donner la liste des Formations qui coutent plus de 3000 Dhs.
15. Pour chaque formation, donner le prix journalier. (Supposant que la durée renseignée sur la table est
en jours)
16. Donner la liste des sessions ouvertes de la formation dont le code est 11.
17. Donner la liste des numéros CIN des étudiants inscrits dans la session 1302 classés par ordre
alphabétique.
18. Donner la liste des spécialités Actives.
19. Combien y a-t ’il d’étudiants ?
20. Donner l’âge de chacun des étudiants (utiliser les fonctions comme : datediff(), CURDATE(),
timestampdiff(), now()…)
21. Quelle est la plus chère des formations ? et la moins chère ?
22. Si un étudiant est inscrit dans toutes les formations, combien il doit payer ?
23. Donner le nombre des étudiants inscrits dans chacune des sessions
24. Donner la liste des numéros CIN des étudiants qui sont inscrits au moins une fois.
25. Donner pour chacun des étudiants le nombre d’inscriptions.
26. Donner pour chaque session le nombre d’inscriptions distantielles et présentielles

P a g e 2 | 10
27. Lister pour chaque formation ses sessions ouvertes. Afficher le Titre de la formation, le nom de la
session, la date de début et la date fin.
28. Lister Les étudiants inscrits dans chacune des formations. Ordonner la liste par titre de formation.
29. Pour la formation web développement, calculer le nombre d’inscriptions distancielles et présentielles.
30. Lister les formations dont le nombre d’inscriptions distancielles est supérieur ou égale à 3. Ordonner la
liste par le nombre d’inscription.
31. Lister pour chaque spécialité active, la liste des formations correspondantes : leurs titres, durée et prix.
Ordonner la liste par l’ordre alphabétique descendant du nom de la spécialité.
32. Afficher l’union de la liste en N : 4 avec la liste des formations dont le nombre d’inscriptions
présentielles est supérieur ou égal à 4.
33. Calculer le total des prix payés par Année et mois de la date début des sessions

Correction :

#Q3
ALTER TABLE INSCRIPTION
MODIFY typeCours VARCHAR(45) NOT NULL;
#Q4
ALTER TABLE session
ADD CONSTRAINT CHK_dateDebut_Fin CHECK (dateFin>= dateDebut);
#Q5
ALTER TABLE SPECIALITE ADD ACTIVE TINYINT

#Q4 Les requêtes d’insertions :

INSERT INTO ETUDIANT (numCINEtu,nomEtu,prenomEtu,dateNaissance,adressEtu,villeEtu,niveauEtu)


values ('AB234567','Alami','Ahmad','1986-01-01','Rue du port, 13','Tanger','bac'), ('G5346789','Toumi','Aicha','2000-12-
03','N12 immeuble Jaouhara','Casablanca','Master'), ('C0987265','Souni','Sanaa','1998-04-30','Place du peuple n
2','Tanger','Niveau bac'),
('D2356903','Idrissi Alami','Mohammed','1996-05-05','Lotissement najah, rue n 12 immeuble 3','Rabat','Bac+ 4'),
('Y1234987','Ouled thami','Ali','1979-12-04','La ville haute, rue chouhada n 6','Tanger','Bachelor'),
('J3578902','Ben Omar','Abd Allah','1990-06-25','Villa Amina n12 bir rami','Kenitra','Phd'), ('F9827363','Boudiaf','Fatima
Zohra','1997-01-10','Immeuble iftikhar, n 13 ettakaddoum','Rabat','Bac + 2’);

Insert into FORMATION (codeForm,titreForm,dureeForm,prixForm)


values
(11,'Programming Java',12,3600),
(12,'web developpment',14,4200),
(13,'Anglais technique',15,3750),
(14,'Communication',10,2500),
(15,'Base de données Oracle',20,6000),
(16,'Soft skills',12,3000);

Insert into session (codesess,nomsess,datedebut,datefin)


values
(1101,'Session 1101','2022-01-02','2022-01-14',11),
(1102,'Session 1102','2022-02-03','2022-02-15',11),
(1201,'Session 1201','2022-03-04','2022-03-18',12),
(1202,'Session 1202','2022-04-05','2022-04-19',12),
(1301,'Session 1301','2022-01-06','2022-01-21',13),
(1302,'Session 1302','2022-05-07','2022-05-22',13),
(1303,'Session 1303','2022-06-08','2022-06-23',13),
(1401,'Session 1401','2022-09-01','2022-09-11',14),
(1402,'Session 1402','2022-08-08','2022-08-18',14),
(1501,'Session 1501','2022-11-11','2022-12-01',15),
(1502,'Session 1502','2022-09-12','2022-10-02',15),
(1601,'Session 1601','2022-09-13','2022-09-25',16),
(1602,'Session 1602','2022-10-14','2022-10-26',16),
(1104,'Session 1104','2022-10-15','2022-10-27',11),
(1203,'Session 1203','2022-11-16','2022-11-30',12),

P a g e 3 | 10
(1204,'Session 1204','2022-12-17','2022-12-31',12);

INSERT INTO SPECIALITE (codeSpec,nomSpec,descSpec,Active)


VALUES
(101,'GL', 'Genie logiciel et develloppement',1),
(102,'Data', 'Data engineering',1),
(103,'Langues', 'Anglais Français',1),
(104,'Communication','Communication',1),
(105,'Securite','Reseaux et securite',0);

Insert into catalogue (CodeSpec , codeForm )


Values
(101,11), (101,12), (102,15), (101,15), (103,13), (104,13), (104,14), (104,16);

Insert into INSCRIPTION (codeSess,numCINEtu,TypeCours )


Values
(1101,'AB234567','Distanciel'),
(1101,'G5346789','Distanciel'),
(1101,'C0987265','Distanciel'),
(1101,'D2356903','Distanciel'),
(1101,'Y1234987','Distanciel'),
(1101,'J3578902','Distanciel'),
(1101,'F9827363','Distanciel'),
(1201,'AB234567','Presenciel'),
(1201,'G5346789','Presenciel'), (1201,'C0987265','Presenciel'), (1201,'D2356903','Presenciel'),
(1201,'Y1234987','Presenciel'), (1201,'J3578902','Presenciel'), (1302,'AB234567','Presenciel'),
(1302,'G5346789','Distanciel'), (1302,'C0987265','Presenciel'), (1302,'D2356903','Presenciel'),
(1302,'Y1234987','Presenciel'), (1401,'G5346789','Distanciel'), (1401,'C0987265','Distanciel'),
(1401,'D2356903','Distanciel'), (1401,'Y1234987','Distanciel'), (1401,'J3578902','Distanciel'), (1401,'F9827363','Distanciel'),
(1501,'AB234567','Distanciel'), (1501,'G5346789','Presenciel'), (1501,'C0987265','Distanciel'),
(1501,'D2356903','Presenciel'), (1501,'Y1234987','Presenciel'), (1501,'J3578902','Presenciel'),
(1501,'F9827363','Presenciel');

#Q7
Update ETUDIANT
Set niveauEtu = 'Bac+ 5' where niveauEtu='Master';
Update ETUDIANT
Set niveauEtu = 'Bac+ 4' where niveauEtu='Bachelor';
Update ETUDIANT
Set niveauEtu = 'Phd' where niveauEtu='Doctorat';

#Q8
Update FORMATION
Set titreForm= 'développement Java' where codeForm = 11;

#Q9
ALTER TABLE inscription ADD numinscription VARCHAR(40);
Update inscription SET numinscription = concat(codeSess,numCINEtu);

#Q10

Update ETUDIANT
Set dateNaissance = '1987-01-02',
villeEtu ='Kenitra' where nomEtu='Alami’;

#Q11

Update inscription
set Typecours = 'Distanciel' where numCINEtu ='G5346789';

#Q12

P a g e 4 | 10
Select * from (nom_de _la_table)

#Q13

Select * from ETUDIANT where villeEtu =’Tanger’;


# ou
Select * from ETUDIANT where villeEtu like ’Tanger’;

#Q14

SELECT * FROM formation


Where prixForm >3000;

#Q15

SELECT codeForm, titreForm, prixForm/dureeForm FROM formation;

#Q16

SELECT * FROM session


where codeForm = 11;

#Q17

SELECT numCINEtu FROM inscription


Where codeSess =1302 Order by numCINEtu
#Q18

SELECT * FROM specialite


where Active =1;

#Q19

Select count(*) from ETUDIANT ;

#Q20
#Méthode 1
SELECT numCINEtu, datediff(CURDATE(),datenaissance)/365.25 FROM etudiant;
#ou Méthode 2
select numCINEtu,timestampdiff( YEAR, datenaissance, now() ) AS age FROM etudiant;
#ou Méthode 3
Select numCINEtu, (YEAR(CURRENT_DATE)-YEAR(datenaissance) - (RIGHT(CURRENT_DATE,5)<RIGHT(datenaissance,5))) as
age from ETUDIANT

#Q21

SELECT codeForm, titreForm, Max(prixForm) FROM formation;


select codeForm, titreForm, Min(prixForm) FROM formation;

#Q22

SELECT SUM(prixForm) FROM formation;

#Q23

SELECT codeSess, count(numCINetu) FROM inscription


group by codeSess;

#Q24

P a g e 5 | 10
SELECT distinct numCINetu FROM inscription

#Q25

SELECT numCINetu, count(codeSess) FROM inscription


group by numCINetu;

#Q26

Select codeSess, typeCours, count(numinscription)


from inscription
group by codeSess,typeCours;

#Q27 Lister pour chaque formation ses sessions ouvertes. Afficher le Titre de la formation, le nom de la session, la date de
début et la date fin.

select titreForm, nomsess,datedebut, datefin from formation


inner join session on session.codeForm = formation.codeForm;

#Q28 Lister Les étudiants inscrits dans chacune des formations. Ordonner la liste par titre de formation.

select titreForm, nomEtu, prenomEtu from inscription


inner join etudiant on etudiant.numCINEtu = inscription.numCINEtu
inner join session on session.codesess = inscription.codeSess
inner join formation on session.codeForm = formation.codeForm
order by titreForm;

#Q29 Pour la formation web développement, calculer le nombre d’inscriptions distancielles et présentielles.

Select TitreForm, TypeCours, count(numinscription) from inscription


inner join session on session.codesess = inscription.codeSess
inner join formation on session.codeForm = formation.codeForm
WHERE titreForm like 'web developpment'
group by TitreForm,TypeCours;

#Q30 Lister les formations dont le nombre d’inscriptions distancielles est supérieur ou égale à 3. Ordonner la liste par le
nombre d’inscription.

Select TitreForm, count(numinscription) from inscription


inner join session on session.codesess = inscription.codeSess
inner join formation on session.codeForm = formation.codeForm
Where typeCours like 'Distanciel'
group by TitreForm
Having count(numinscription) >=3
Order by count(numinscription);

#Q31 Lister pour chaque spécialité active, la liste des formations correspondantes : leurs titres, durée et prix. Ordonner la
liste par l’ordre alphabétique descendant du nom de la spécialité.

Select nomSpec, titreForm, dureeForm, prixForm from specialite


inner join catalogue on catalogue.codespec = specialite.codespec
inner join formation on formation.codeForm = catalogue.codeForm
where Active = 1 Order by nomspec desc;

#Q32 Afficher la liste des formations dont le nombre d’inscriptions présentielles est supérieur ou égal à 4.

Select TitreForm, count(numinscription) from inscription


inner join session on session.codesess = inscription.codeSess
inner join formation on session.codeForm = formation.codeForm
P a g e 6 | 10
Where typeCours like 'Presenciel'
group by TitreForm Having count(numinscription) >=4);

#Q33 Calculer le total des prix payés par Année et mois de la date début des sessions

Select Year(Datedebut),Month(dateDebut), count(numinscription) * PrixForm from inscription


inner Join session on session.codesess = inscription.codeSess
inner join formation on session.codeForm = formation.codeForm
group by Year(Datedebut),Month(dateDebut)

Exercice 4 : «Chevaux d’écurie»


Construire le MLD suivant :

Questions :

1- Consulter le contenu de toutes les tables du schéma « chevauxdecurie »


2- Donner la liste des chevaux de la race « Arabian » ordonnée par ordre alphabétique descendant.
3- Quelles sont leurs tailleType et Poidstype.
4- Lister tous les propriétaires de chevaux.
5- Qui est la personne qui n’a pas de supérieur ?
6- Quels concours se sont déroulés dans l’année 2019.
7- Combien y a-t ’il de Chevaux Noir ?
8- Combien y a-t ’il de chevaux de la race AngloArabe?
9- Donner le numéro et le nom du cheval dont le Numéro de tatouage est : T0415
10- Combien y a-t-il d’éditions du concours : « Concours Dubai »?
11- Quel est le nombre total de participants dans toutes les éditions du Concours Dubai?
12- Dans quels concours /année les chevaux de l’écurie ont eu la première place?
13- Quels chevaux ont participé à l’édition 2018 du concours de Londres ?
14- Comment s’appelle le directeur de l’établissement ?
P a g e 7 | 10
15- Combien y a-t ’il de propriétaires ?
16- Combien de chevaux le propriétaire N6 a acheté en 2020 ?
17- Combien il a payé pour acheter ses chevaux ?
18- Lister le nom et le numéro de tatouage des chevaux qui avaient une taille au-dessous de la taille type
de leurs races durant le mois de Janvier.
19- Lister pour chaque éleveur, le nombre des chevaux dont il est responsable.
20- Lister le nom et la fonction du supérieur de chaque personne.
21- Lister le nom et le numéro de tatouage des chevaux qui avaient une taille moyenne au-dessous de la
taille type de leurs races. Ordonner la liste par la taille moyenne des chevaux.
22- Afficher pour chaque cheval de nom et la race du père et de la mère.
23- Combien chaque cheval a–t-il de fils ?
24- Pour chaque cheval (Numéro, nom), afficher le propriétaire actuel (numéro, Nom), la date d’achat et le
prix d’achat.
25- De quelle race sont les chevaux qui ont eu les meilleures places aux différents concours? (calculer la
moyenne des places pour chaque race)

Correction

#Q 1 Consulter le contenu de toutes les tables du schéma « chevauxdecurie »


Select * from (nom_de _la_table)

#Q 2 Donner la liste des chevaux de la race « Arabian » ordonnée par ordre alphabétique descendant.

SELECT * FROM cheval Where nomRace = 'Arabian';


# ou SELECT * FROM cheval Where nomRace like 'Arabian';

#Q 3 Quelles sont leurs tailleType et Poidstype.

SELECT poidsType,tailleType FROM race WHERE nomRace ='Arabian';

#Q 4 Lister tous les propriétaires de chevaux.

SELECT * FROM personne Where fonctionPers like '%proprietaire%'; where codeForm = 11;

#Q5 Qui est la personne qui n’a pas de supérieur ?

SELECT * FROM personne Where numPersSup is null;

#Q6 Quels concours se sont déroulés dans l’année 2019.

SELECT * FROM concours Where AnneeConcours =2019;

#Q7 Combien y a-t ’il de Chevaux Noir ?

SELECT count(*) FROM chevauxdecurie.cheval where couleurCheval = 'Noir'; (ou like 'Noir')

#Q8 Combien y a-t ’il de chevaux de la race AngloArabe?

SELECT count(*) FROM chevauxdecurie.cheval where NomRace like 'AngloArabe';

#Q9 Donner le numéro et le nom du cheval dont le Numéro de tatouage est : T0415

SELECT numCheval, NomCheval FROM chevauxdecurie.cheval where numTatouage='T0415'

#Q10 Combien y a-t-il d’éditions du concours : « Concours Dubai »?

SELECT Count(AnneeConcours) FROM chevauxdecurie.concours Where libelleConcours like

P a g e 8 | 10
'Concours Dubai';

#Q11 Quel est le nombre total de participants dans toutes les éditions du Concours Dubai?

SELECT SUM(NbrParticipants) FROM chevauxdecurie.concours Where libelleConcours like '% Dubai';

#Q12 Dans quels concours /année les chevaux de l’écurie ont eu la première place?

SELECT libelleConcours, AnneeConcours FROM chevauxdecurie.participationconcours Where Place


=1;

#Q13 Quels chevaux ont participé à l’édition 2018 du concours de Londres ?

SELECT numCheval FROM chevauxdecurie.participationconcours Where libelleConcours ='Concours


Londre' and AnneeConcours = 2018;

#Q14 Comment s’appelle le directeur de l’établissement ?

SELECT nomPers FROM chevauxdecurie.personne Where numPersSup is NULL;

#Q15 Combien y a-t ’il de propriétaires ?

SELECT count(*) FROM chevauxdecurie.personne Where fonctionPers like '%proprietaire%'; ( il y a


des propriétaires et des éleveurs-propriétaires)

#Q16 Combien de chevaux le propriétaire N6 a acheté en 2020 ?

SELECT count(*) FROM chevauxdecurie.proprietaire Where numPers = 6 and YEAR(DateAchat)=


2020;

#Q17 Combien il a payé pour acheter ses chevaux ?

SELECT sum(PrixAchat) FROM chevauxdecurie.proprietaire Where numPers = 6 and


YEAR(DateAchat)= 2020;

#Q18 Lister le nom et le numéro de tatouage des chevaux qui avaient une taille au-dessous de la
taille type de leurs races durant le mois de Janvier.

SELECT cheval.numTatouage, cheval.nomCheval, tailleMois, tailleType


FROM chevauxdecurie.croissance
inner join cheval on cheval.numCheval = croissance.numCheval
inner join race on race.nomRace = cheval.nomRace
Where mois = 1 and tailleMois < tailleType;

#Q19 Lister pour chaque éleveur, le nombre des chevaux dont il est responsable.

SELECT numPers,NomPers, count(numcheval)


FROM chevauxdecurie.personne
inner join cheval on cheval.numPersEleveur = Personne.numPers
group by numPers,NomPers ;

#Q20 Lister le nom et la fonction du supérieur de chaque personne.

SELECT p.nomPers, s.nompers, s.fonctionPers


FROM personne p, personne s
where s.numPers = p.numPersSup;

P a g e 9 | 10
#Q21 Lister le nom et le numéro de tatouage des chevaux qui avaient une taille moyenne au-dessous
de la taille type de leurs races. Ordonner la liste par la taille moyenne des chevaux.

SELECT cheval.numTatouage, cheval.nomCheval, AVG(tailleMois),tailleType


FROM chevauxdecurie.croissance
inner join cheval on cheval.numCheval = croissance.numCheval
inner join race on race.nomRace = cheval.nomRace
group by cheval.numTatouage, cheval.nomCheval
Having AVG(tailleMois) < race.tailleType
Order by AVG(tailleMois) ;

#Q22 Afficher pour chaque cheval de nom et la race du père et de la mère.

SELECT cheval.nomCheval, pere.nomCheval as NomPere, pere.nomRace as RacePere,


mere.nomcheval as nomMere, mere.nomRace as raceMere
FROM chevauxdecurie.cheval, cheval pere, cheval mere
Where pere.numcheval = cheval.numchevalpere
and mere.numcheval = cheval.numchevalmere;

#Q23 Combien chaque cheval a–t-il de fils ?

SELECT numChevalPere, count(numcheval)


FROM chevauxdecurie.cheval
where numChevalPere <>0
group by numchevalPere;

#Q24 Pour chaque cheval (Numéro, nom), afficher le propriétaire actuel (numéro, Nom), la date
d’achat et le prix d’achat.

SELECT a.numcheval, c.nomCheval,a.numPers, p.nomPers, a.DateAchat from proprietaire a, (SELECT


numcheval,Max(DateAchat) as maxdate
FROM chevauxdecurie.proprietaire
group by numcheval) b, Personne p, Cheval c
where a.numcheval = b.numcheval
And a.dateAchat = b.maxdate
AND a.numPers = p.numPers
AND a.numcheval = c.numcheval;

#Q25 De quelle race sont les chevaux qui ont eu les meilleures places aux différents concours?
(calculer la moyenne des places pour chaque race)

P a g e 10 | 10

Vous aimerez peut-être aussi