mirror of
https://github.com/ArthurDanjou/ArtStudies.git
synced 2026-01-14 15:54:13 +01:00
Correction des tables Employe et Departement : ajout de contraintes de clé primaire et étrangère, mise à jour des types de données, et ajout de nouvelles requêtes SQL pour améliorer la structure et les fonctionnalités.
This commit is contained in:
@@ -2,16 +2,21 @@ 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
|
||||
Population INTEGER NOT NULL,
|
||||
|
||||
CONSTRAINT Localite_PK PRIMARY KEY (Ville)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Magasin(
|
||||
Id VARCHAR(3),
|
||||
Enseigne VARCHAR(100) NOT NULL,
|
||||
Ville VARCHAR(255) NOT NULL,
|
||||
Chiffre DECIMAL(10,2) NOT NULL,
|
||||
|
||||
CONSTRAINT Magasin_FK FOREIGN KEY (VILLE) REFERENCES Localite(Ville),
|
||||
CONSTRAINT Magasin_PK PRIMARY KEY (Id)
|
||||
);
|
||||
|
||||
INSERT INTO Localite (Ville, Population) VALUES
|
||||
@@ -36,36 +41,47 @@ SELECT * FROM Magasin;
|
||||
SELECT * FROM Localite;
|
||||
|
||||
-- Q1.2
|
||||
SELECT 'Q1.2';
|
||||
|
||||
SELECT Ville, COUNT(*) AS NombreMagasins
|
||||
FROM Magasin
|
||||
GROUP BY Ville
|
||||
ORDER BY Ville ASC;
|
||||
|
||||
-- Q1.3
|
||||
SELECT 'Q1.3';
|
||||
|
||||
SELECT Ville, Enseigne, COUNT(*) as NombreMagasins
|
||||
FROM Magasin
|
||||
GROUP BY Ville, Enseigne
|
||||
HAVING NombreMagasins >= 2;
|
||||
|
||||
-- Q1.4
|
||||
SELECT Enseigne, Ville, AVG(Chiffre) AS ChiffreMoyen
|
||||
SELECT 'Q1.4';
|
||||
|
||||
SELECT Enseigne, AVG(Chiffre) AS ChiffreMoyen
|
||||
FROM Magasin
|
||||
GROUP BY Enseigne, Ville;
|
||||
GROUP BY Enseigne;
|
||||
|
||||
-- Q1.5
|
||||
SELECT Enseigne, m.Ville, AVG(Chiffre) AS ChiffreMoyen
|
||||
FROM Magasin m
|
||||
JOIN Localite l ON m.Ville = l.Ville
|
||||
WHERE l.Population >= 80000
|
||||
GROUP BY Enseigne, m.Ville;
|
||||
SELECT 'Q1.5';
|
||||
|
||||
SELECT Enseigne, AVG(Chiffre) AS ChiffreMoyen
|
||||
FROM Magasin m, Localite l
|
||||
WHERE m.Ville = l.Ville AND l.Population >= 80000
|
||||
GROUP BY Enseigne;
|
||||
|
||||
-- Q1.6
|
||||
SELECT Enseigne, Ville, SUM(Chiffre) as ChiffreAffaire
|
||||
SELECT 'Q1.6';
|
||||
|
||||
SELECT Ville, SUM(Chiffre) as ChiffreAffaire
|
||||
FROM Magasin
|
||||
GROUP BY Ville, Enseigne;
|
||||
GROUP BY Ville;
|
||||
|
||||
-- Q1.7
|
||||
SELECT Enseigne, Ville, SUM(Chiffre) as ChiffreAffaire
|
||||
SELECT 'Q1.7';
|
||||
|
||||
SELECT Ville, SUM(Chiffre) as ChiffreAffaire
|
||||
FROM Magasin
|
||||
GROUP BY Ville, Enseigne
|
||||
HAVING ChiffreAffaire >= 1000000;
|
||||
WHERE Chiffre > 1000000
|
||||
GROUP BY Ville;
|
||||
@@ -1,24 +1,30 @@
|
||||
DROP TABLE IF EXISTS Employe;
|
||||
DROP TABLE IF EXISTS Departement;
|
||||
DROP TABLE IF EXISTS Employe;
|
||||
|
||||
|
||||
-- Q2.1
|
||||
-- La clé 'Dep' ne fait pas référence à une clé primaire dans la table 'Departement' car les valeurs ne sont pas uniques.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Employe(
|
||||
Eno INTEGER PRIMARY KEY,
|
||||
Eno INTEGER,
|
||||
Enom VARCHAR(20),
|
||||
Prof VARCHAR(30),
|
||||
Date_Emb Date,
|
||||
Salaire INTEGER,
|
||||
Prime INTEGER,
|
||||
Dep INTEGER
|
||||
Dep INTEGER,
|
||||
|
||||
CONSTRAINT Employe_PK PRIMARY KEY (Eno)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Departement(
|
||||
Dno INTEGER PRIMARY KEY,
|
||||
Dno INTEGER,
|
||||
Dnom VARCHAR(20),
|
||||
Directeur INTEGER,
|
||||
Ville VARCHAR(20)
|
||||
Ville VARCHAR(20),
|
||||
|
||||
CONSTRAINT Departement_PK PRIMARY KEY (Dno),
|
||||
CONSTRAINT Departement_FK FOREIGN KEY (Directeur) REFERENCES Employe(Eno)
|
||||
);
|
||||
|
||||
INSERT INTO Employe VALUES
|
||||
@@ -29,68 +35,182 @@ INSERT INTO Employe VALUES
|
||||
(50, 'Léon', 'Technicien', '2015-09-01', 2100, 1000, 2);
|
||||
|
||||
INSERT INTO Departement VALUES
|
||||
(1, 'Vente', 30, 'Passy'),
|
||||
(1, 'Ventes', 30, 'Passy'),
|
||||
(2, 'Production', 20, 'Lyon'),
|
||||
(3, 'Développement', 40, 'Grenoble'),
|
||||
(4, 'Recherche', 40, 'Antibes');
|
||||
|
||||
-- Q2.2
|
||||
SELECT 'Q2.2';
|
||||
|
||||
SELECT * FROM Employe;
|
||||
SELECT * FROM Departement;
|
||||
|
||||
-- Q2.3
|
||||
SELECT 'Q2.3';
|
||||
|
||||
SELECT Enom, Salaire FROM Employe;
|
||||
|
||||
-- Q2.4
|
||||
SELECT 'Q2.4';
|
||||
|
||||
SELECT DISTINCT Prof FROM Employe;
|
||||
|
||||
-- Q2.5
|
||||
SELECT 'Q2.5';
|
||||
|
||||
SELECT Enom, Salaire FROM Employe WHERE Salaire < 4000;
|
||||
|
||||
-- Q2.6
|
||||
SELECT 'Q2.6';
|
||||
|
||||
SELECT Enom, Prof FROM Employe e
|
||||
JOIN Departement d ON e.Dep = d.Dno
|
||||
WHERE d.Ville = 'Lyon';
|
||||
|
||||
-- Q2.7
|
||||
SELECT 'Q2.7';
|
||||
|
||||
SELECT Enom, Prof FROM Employe e
|
||||
JOIN Departement d ON d.Directeur = e.Eno
|
||||
WHERE d.Dnom = 'Production';
|
||||
|
||||
-- Q2.8
|
||||
SELECT 'Q2.8';
|
||||
|
||||
SELECT Enom, Date_Emb FROM Employe
|
||||
WHERE Prof = 'Technicien';
|
||||
|
||||
-- Q2.9
|
||||
SELECT 'Q2.9';
|
||||
|
||||
SELECT * FROM Employe, Departement;
|
||||
|
||||
-- Q.2.10
|
||||
SELECT 'Q2.10';
|
||||
|
||||
SELECT e.Enom, d.Dnom FROM Employe e, Departement d
|
||||
WHERE e.Dep = d.Dno;
|
||||
|
||||
-- Q2.11
|
||||
SELECT 'Q2.11';
|
||||
|
||||
SELECT e.Enom, d.Dnom, dir.Enom AS Directeur FROM Employe e, Departement d, Employe dir
|
||||
WHERE e.Dep = d.Dno AND d.Directeur = dir.Eno;
|
||||
|
||||
-- Q2.12
|
||||
SELECT 'Q2.12';
|
||||
|
||||
SELECT e.Enom, e.Date_Emb, d.Dnom, dir.Enom AS Directeur, dir.Date_Emb as 'Embauche Directeur'
|
||||
FROM Employe e, Departement d, Employe dir
|
||||
WHERE e.Dep = d.Dno AND d.Directeur = dir.Eno AND dir.Date_Emb > e.Date_Emb;
|
||||
|
||||
-- Q2.13
|
||||
SELECT 'Q2.13';
|
||||
|
||||
SELECT e.Eno, e.Enom FROM Employe e, Departement d
|
||||
WHERE e.Dep = d.Dno AND d.Ville = 'Lyon';
|
||||
|
||||
-- Q2.14
|
||||
SELECT 'Q2.14';
|
||||
|
||||
SELECT * FROM Departement
|
||||
WHERE Dno NOT IN (SELECT DISTINCT Dep FROM Employe);
|
||||
|
||||
-- Q2.15
|
||||
SELECT 'Q2.15';
|
||||
|
||||
SELECT dir.Enom, d.Dnom, d.Ville FROM Employe dir, Departement d
|
||||
WHERE dir.Eno = d.Directeur and (d.Dno = 1 OR d.Dno = 3);
|
||||
|
||||
-- Q2.16
|
||||
SELECT 'Q2.16';
|
||||
|
||||
INSERT INTO Employe VALUES (60, 'Jérémy', 'Ingénieur', '2013-10-26', 2400, 1000, 2);
|
||||
|
||||
SELECT e.Enom, d.Dnom, d.Dnom FROM Employe e, Departement d, Employe inge
|
||||
WHERE e.Dep = d.Dno AND inge.Prof = 'Ingénieur' and inge.Dep = e.Eno;
|
||||
SELECT DISTINCT e.Enom
|
||||
FROM Employe e
|
||||
WHERE e.Dep IN (
|
||||
SELECT Dep FROM Employe WHERE Prof = 'Ingénieur'
|
||||
);
|
||||
|
||||
-- Q2.17
|
||||
SELECT 'Q2.17';
|
||||
|
||||
SELECT e.Enom, e.Salaire
|
||||
FROM Employe e
|
||||
WHERE e.Salaire >= (
|
||||
SELECT MIN(ing.Salaire) FROM Employe ing WHERE ing.Prof = 'Ingénieur'
|
||||
) AND e.Prof <> 'Ingénieur';
|
||||
|
||||
-- Q2.18
|
||||
SELECT 'Q2.18';
|
||||
|
||||
INSERT INTO Employe VALUES (70, 'Edmond', 'Président', '2010-02-04', 5800, 4000, 1);
|
||||
|
||||
SELECT e.Enom, e.Salaire FROM Employe e
|
||||
WHERE e.Salaire >= (
|
||||
SELECT MAX(ing.Salaire) FROM Employe ing WHERE ing.Prof = 'Ingénieur'
|
||||
) AND e.Prof <> 'Ingénieur';
|
||||
|
||||
-- Q2.19
|
||||
SELECT 'Q2.19';
|
||||
|
||||
INSERT INTO Employe VALUES (80, 'Dominique', 'Technicien', '2010-03-01', 2900, 2000, 2);
|
||||
|
||||
SELECT e.Enom, e.Date_Emb FROM Employe e, Departement d
|
||||
WHERE e.Dep = d.Dno
|
||||
AND d.Dnom = 'Ventes'
|
||||
AND e.Date_Emb IN (
|
||||
SELECT e2.Date_Emb FROM Employe e2, Departement d2
|
||||
WHERE e2.Dep = d2.Dno AND d2.Dnom = 'Production'
|
||||
);
|
||||
|
||||
-- Q2.20
|
||||
SELECT 'Q2.20';
|
||||
|
||||
SELECT e.Enom, e.Date_Emb FROM Employe e
|
||||
WHERE e.Date_Emb < ALL (
|
||||
SELECT e2.Date_Emb FROM Employe e2
|
||||
WHERE e2.Dep = 2
|
||||
);
|
||||
|
||||
-- Q2.21
|
||||
SELECT 'Q2.21';
|
||||
|
||||
SELECT e.Enom, e.Prof, d.Directeur FROM Employe e, Departement d
|
||||
WHERE e.Dep = d.Dno AND e.Prof = (
|
||||
SELECT Prof FROM Employe WHERE Enom = 'Claire'
|
||||
) AND d.Directeur = (
|
||||
SELECT dep_claire.Directeur FROM Employe c, Departement dep_claire WHERE c.Enom = 'Claire' AND c.Dep = dep_claire.Dno
|
||||
);
|
||||
|
||||
-- Q2.22
|
||||
SELECT 'Q2.22';
|
||||
|
||||
SELECT e.Enom FROM Employe e WHERE e.Prime IS NOT NULL;
|
||||
|
||||
-- Q2.23
|
||||
SELECT 'Q2.23';
|
||||
|
||||
SELECT e.Enom, e.Prof, e.Salaire FROM Employe e
|
||||
ORDER BY e.Prof ASC, e.Salaire DESC;
|
||||
|
||||
-- Q2.24
|
||||
SELECT 'Q2.24';
|
||||
|
||||
SELECT AVG(e.Salaire) AS Salaire_Moyen FROM Employe e;
|
||||
|
||||
-- Q2.25
|
||||
SELECT 'Q2.25';
|
||||
|
||||
SELECT Count(*) as Nb_Employes FROM Employe e, Departement d
|
||||
WHERE e.Dep = d.Dno AND d.Dnom = 'Production';
|
||||
|
||||
-- Q2.26
|
||||
SELECT 'Q2.26';
|
||||
|
||||
SELECT e.Enom, d.Dnom FROM Employe e, Departement d
|
||||
WHERE e.Dep = d.Dno AND e.Salaire >= (
|
||||
SELECT MAX(e2.Salaire) FROM Employe e2 WHERE e2.Dep = d.Dno
|
||||
)
|
||||
Reference in New Issue
Block a user