Add MySQL setup and initial data scripts

- Created a Docker Compose file to set up a MySQL container named M2_SQL_COURSE with an empty password and a database named TP.
- Added a Makefile with a target to execute a SQL script (TP1.sql) inside the MySQL container and log the output.
- Implemented the TP1.sql script to create tables for Magasin and Localite, insert initial data, and perform several queries.
This commit is contained in:
2025-09-25 09:31:10 +02:00
parent a2760c7fa2
commit 615261961a
4 changed files with 219 additions and 1434 deletions

File diff suppressed because it is too large Load Diff

4
M2/SQL/Makefile Normal file
View File

@@ -0,0 +1,4 @@
# Makefile
tp1:
docker exec -i M2_SQL_COURSE mysql -u root TP -t < ./scripts/TP1.sql | tee logs/last-run.log

13
M2/SQL/docker-compose.yml Normal file
View File

@@ -0,0 +1,13 @@
services:
mysql:
container_name: M2_SQL_COURSE
image: mysql:latest
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
MYSQL_DATABASE: TP
volumes:
- mysql_data:/var/lib/mysql
restart: unless-stopped
volumes:
mysql_data:

50
M2/SQL/scripts/TP1.sql Normal file
View File

@@ -0,0 +1,50 @@
DROP TABLE IF EXISTS Magasin;
DROP TABLE IF EXISTS Localite;
-- Q1.1
CREATE TABLE IF NOT EXISTS Magasin(
Id VARCHAR(3) PRIMARY KEY,
Enseigne VARCHAR(100) NOT NULL,
Ville VARCHAR(255) NOT NULL,
Chiffre INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS Localite(
Ville VARCHAR(255) NOT NULL,
Population INTEGER NOT NULL
);
INSERT INTO Localite (Ville, Population) VALUES
('Créteil', 92984),
('Pantin', 60597),
('Colombes', 87328);
INSERT INTO Magasin (Id, Enseigne, Ville, Chiffre) VALUES
('D10', 'Super Discount', 'Créteil', 2800000),
('I10', 'Inter Prix', 'Créteil', 1230000),
('T01', 'Leader Trade', 'Créteil', 830000),
('M01', 'Discount Market', 'Créteil', 1010000),
('T08', 'Leader Trade', 'Pantin', 3230000),
('D20', 'Super Discount', 'Pantin', 556000),
('D22', 'Super Discount', 'Colombes', 4032000),
('T05', 'Leader Trade', 'Colombes', 2780000),
('I17', 'Inter Prix', 'Colombes', 3912000),
('M87', 'Discount Market', 'Colombes', 1471000),
('M89', 'Discount Market', 'Colombes', 845000);
SELECT * FROM Magasin;
SELECT * FROM Localite;
-- Q1.2
SELECT Ville, COUNT(*) AS NombreMagasins
FROM Magasin
GROUP BY Ville
ORDER BY Ville ASC;
-- Q1.3
SELECT Ville, Enseigne, COUNT(*) as NombreMagasins
FROM Magasin
GROUP BY Ville, Enseigne
HAVING NombreMagasins >= 2;
-- Q1.4