Académique Documents
Professionnel Documents
Culture Documents
On considère le schéma suivant (les clés étrangères sont suivies de #, les clés primaires sont soulignées)
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.
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