diff --git a/M2/SQL/scripts/TP1.sql b/M2/SQL/scripts/TP1.sql index 8d30c37..6a593f0 100644 --- a/M2/SQL/scripts/TP1.sql +++ b/M2/SQL/scripts/TP1.sql @@ -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; \ No newline at end of file +WHERE Chiffre > 1000000 +GROUP BY Ville; \ No newline at end of file diff --git a/M2/SQL/scripts/TP2.sql b/M2/SQL/scripts/TP2.sql index ce8a108..fc7a8f0 100644 --- a/M2/SQL/scripts/TP2.sql +++ b/M2/SQL/scripts/TP2.sql @@ -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; \ No newline at end of file +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 +) \ No newline at end of file