Vous êtes sur la page 1sur 4

Office de la Formation Professionnelle

OFPPT et de la Promotion du Travail

Examen De Fin De Module


AU TITRE DE L’ANNEE : 2013/2014

Filière : 2TDI Année de formation : 2A


Niveau : TS Epreuve : théorique
N° du module : 19 Durée : 2h 15
Intitulé du module : Système de Gestion de Base de Données (I)
Date d'évaluation : Barème/40
Variante 2

Nous souhaitons développer une application de gestion de réservation de voiture de location.

On considère le schéma suivant (les clés étrangères sont suivies de #, les clés primaires sont soulignées)

Compagnie (numCompagnie, nom, ville, ChiffreAffaire)


Voiture (Matricule, numCompagnie #, Marque, prixLocation, DateMiseHorsService)
Client (numClient, cin, nom, prenom, tel)
Occupation (numOcc, numClient#, Matricule#, dateOccup)
Reservation (numRes, NumClient#, Matricule#)

I) Création de la base de données (2Pts par question)

1) Créez la base de données DB_Location en spécifiant les paramètres de création.


2) Créez toutes les tables avec les contraintes d’intégrité PK et FK, et ajouter un enregistrement par table.
3) Ajouter une contrainte à la table ‘Restaurant’ pour que la colonne ‘etoile’ soit inferieur à 5.
4) Ajouter une colonne ‘dateRes’ dans la table ‘Reservation’.

II) Mise à jour des données (2Pts par question)

1) Augmentez par 5% le prix par jour des voitures dont le prix de location est supérieur à 250.
2) Supprimez les voitures qui ont la date de mise hors service dépassée.

III) Extraction des données (2Pts par question)

1) Listez les compagnies de la ville Casa.


2) Listez les voitures (matricule+marque séparé par virgule) dont la marque ou la matricule contient la lettre
‘C’, nommez la colonne ‘Voiture C’.
3) listez les compagnies ayant un chiffre d’affaire supérieur à 1000000.
4) Affichez la moyenne des prix de location des voitures par jour de chaque compagnie.
5) Affichez toute les compagnies dont la ville contient la lettre ‘A’ et ‘K’ et qui ont pu réaliser plus de 20
réservations le mois en cours.
6) Donnez la requête qui affiche le nombre de compagnies par ville.
7) Donnez la requête qui affiche le nombre de voiture par ville.
1/2
Office de la Formation Professionnelle
OFPPT et de la Promotion du Travail
8) Affichez les voitures qui ont un prix de location supérieur au prix de location moyen de toutes les voitures.
9) Affichez les noms des compagnies ayant plus de 20 voitures.
10) Affichez toutes les réservations de l’année en cours, ordonnez le résultat par date de réservation.
11) Affichez les clients qui ont au moins trois réservations dans des compagnies ayant le chiffre d’affaire
inférieur à 500000.
12) Affichez les clients qui ont eu deux réservations successives dans une durée de moins de deux mois.

IV) Les vues (2Pts par question)

1) Créer la vue RESERCLT qui affiche le nombre de réservations par client.


2) Créer la vue CLTJUIN qui affiche les noms des clients qui n’ont jamais fait de réservation le mois de Juin.

exercice1:
1-
CREATE DATABASE DB_Location;

2-
CREATE TABLE Compagnie (numCompagnie INT PRIMARY KEY, nom VARCHAR(255), ville
VARCHAR(255), ChiffreAffaire INT);
INSERT INTO Compagnie (numCompagnie, nom, ville, ChiffreAffaire) VALUES (1, 'Compagnie 1', 'Ville 1',
1000000);

CREATE TABLE Voiture (Matricule INT PRIMARY KEY, numCompagnie INT, Marque VARCHAR(255),
prixLocation INT, DateMiseHorsService DATE, FOREIGN KEY (numCompagnie) REFERENCES
Compagnie(numCompagnie));
INSERT INTO Voiture (Matricule, numCompagnie, Marque, prixLocation, DateMiseHorsService) VALUES
(1, 1, 'Marque 1', 50, '2022-01-01');

CREATE TABLE Client (numClient INT PRIMARY KEY, cin INT, nom VARCHAR(255), prenom
VARCHAR(255), tel VARCHAR(255));
INSERT INTO Client (numClient, cin, nom, prenom, tel) VALUES (1, 123456, 'Nom 1', 'Prenom 1', 'tel 1');

CREATE TABLE Occupation (numOcc INT PRIMARY KEY, numClient INT, Matricule INT, dateOccup
DATE, FOREIGN KEY (numClient) REFERENCES Client(numClient), FOREIGN KEY (Matricule)
REFERENCES Voiture(Matricule));
INSERT INTO Occupation (numOcc, numClient, Matricule, dateOccup) VALUES (1, 1, 1, '2022-01-01');

CREATE TABLE Reservation (numRes INT PRIMARY KEY, numClient INT, Matricule INT, FOREIGN
KEY (numClient) REFERENCES Client(numClient), FOREIGN KEY (Matricule) REFERENCES
Voiture(Matricule));
INSERT INTO Reservation (numRes, numClient, Matricule) VALUES (1, 1, 1);

3-
ALTER TABLE Compagnie ADD CHECK (ChiffreAffaire < 0);

4-
ALTER TABLE Reservation ADD dateRes DATE;

2/2
Office de la Formation Professionnelle
OFPPT et de la Promotion du Travail

exercice 2:

1-
UPDATE Voiture SET prixLocation = prixLocation * 1.05 WHERE prixLocation > 250;

2-
DELETE FROM Voiture WHERE DateMiseHorsService < CURRENT_DATE;

exercice 3-

1-
SELECT * FROM Compagnie WHERE ville = 'Casa';

2-
SELECT CONCAT(Matricule, ', ', Marque) as 'Voiture C' FROM Voiture WHERE Matricule LIKE '%C%' OR
Marque LIKE '%C%';

3-
SELECT * FROM Compagnie WHERE ChiffreAffaire > 1000000;

4-
SELECT numCompagnie, AVG(prixLocation) as 'Moyenne des prix de location' FROM Voiture GROUP BY
numCompagnie;

5-
SELECT C.* FROM Compagnie C JOIN Reservation R ON C.numCompagnie = R.numCompagnie
WHERE C.ville LIKE '%A%' AND C.ville LIKE '%K%' AND R.dateRes > DATE_SUB(NOW(), INTERVAL
1 MONTH)
GROUP BY C.numCompagnie
HAVING COUNT(R.numRes) > 20

6-
SELECT ville, COUNT(numCompagnie) as 'Nombre de compagnies' FROM Compagnie GROUP BY ville;

7-
SELECT ville, COUNT(Matricule) as 'Nombre de voitures' FROM Voiture JOIN Compagnie ON
Voiture.numCompagnie = Compagnie.numCompagnie GROUP BY ville;

8-
SELECT * FROM Voiture WHERE prixLocation > (SELECT AVG(prixLocation) FROM Voiture);

9-
SELECT nom FROM Compagnie JOIN Voiture ON Compagnie.numCompagnie = Voiture.numCompagnie
GROUP BY Compagnie.numCompagnie HAVING COUNT(Voiture.Matricule) > 20;
3/2
Office de la Formation Professionnelle
OFPPT et de la Promotion du Travail

10-
SELECT * FROM Reservation WHERE year(dateRes) = year(CURRENT_DATE) ORDER BY dateRes;

11-
SELECT numClient FROM Reservation JOIN Compagnie ON Reservation.numCompagnie =
Compagnie.numCompagnie
WHERE Compagnie.ChiffreAffaire < 500000
GROUP BY numClient
HAVING COUNT(numRes) >=3

12-
WITH Reservation_order AS (
SELECT numClient, dateRes, ROW_NUMBER() OVER (PARTITION BY numClient ORDER BY dateRes)
as row_num
FROM Reservation
)
SELECT numClient FROM Reservation_order
WHERE row_num = 2 AND DATEDIFF(dateRes, (SELECT dateRes FROM Reservation_order WHERE
row_num =1)) <= 60

exercice 4:

1-
CREATE VIEW RESERCLT AS
SELECT numClient, COUNT(numRes) as 'Nombre de réservations' FROM Reservation GROUP BY
numClient;

2-
CREATE VIEW CLTJUIN AS
SELECT nom, prenom FROM Client
WHERE numClient NOT IN (SELECT numClient FROM Reservation WHERE MONTH(dateRes) = 6);

4/2

Vous aimerez peut-être aussi