Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 6

Stript Base de donnees

CREATION DES TABLES

CREATE TABLE Departement (


code-dept varchar(10) PRIMARY KEY,
lib-dept varchar(20) NOT NULL,
budget-dept INT,
matri-emp varchar(10));

CREATE TABLE Projet (


code-proj varchar(10) PRIMARY KEY,
lib-proj varchar(20) NOT NULL,
budjet-proj INT,
code-dept varchar(10) NOT NULL,
matri-emp varchar(10) NOT NULL);

CREATE TABLE Employe (


matri-emp varchar(10) PRIMARY KEY,
nom-emp varchar (30) NOT NULL,
prenom-emp varchar (30),
adresse-emp varchar (30) NOT NULL,
salaire-emp INT,
code-dept varchar(10) NOT NULL,
code-bur varchar(10) NOT NULL,
num-tel INT);

CREATE TABLE Telephone (


num-tel INT PRIMARY KEY,
code-bur varchar(10) NOT NULL );

CREATE TABLE Bureau (


code-bur varchar(10) PRIMARY KEY,
lib-bur varchar(30) NOT NULL,
code-dept varchar(10) NOT NULL);

CREATE TABLE Tache (


code-tc varchar(10) PRIMARY KEY,
design-tc varchar(20) NOT NULL,
cout-unit-tc INT ,
code-proj varchar(10) NOT NULL);

CREATE TABLE Effectuer (


matri-emp varchar(10),
code-tc varchar(10),
Nbr-heur-eff INT,
PRIMARY KEY(matri_emp,code_tc));

INSERTION DES DONNEES DANS LES TABLES

INSERT INTO Departement VALUES ('de1','Technique',200000,'A10')


INSERT INTO Departement VALUES ('de2','Mathematiques',5000000,'A20')
INSERT INTO Departement VALUES ('de3','Informatique',10000000,'A30')
INSERT INTO Departement VALUES ('de4','Etude',60000,'A40')

INSERT INTO Projet VALUES ('p5','Developpement',1000000,'nu1','A20')


INSERT INTO projet VALUES ('p10','Construction',150000,'nu2','A40')
INSERT INTO Projet VALUES ('p15','Amenagement',300000,'nu3','A10')
INSERT INTO Projet VALUES ('p20','Gestion_ordure',20000,'nu4','A60')
INSERT INTO Projet VALUES ('p25','Sante',1000000,'nu1','A50')

INSERT INTO Employe VALUES


('A20','NDONG','Djeffry','D.P',10550000,'de1','bu40',066456890)
INSERT INTO Employe VALUES
('A40','MAKAYA','Benedicte','Alibandeng',5620000,'de2','bu41',065236789)
INSERT INTO Employe VALUES
('A10','MOUSSAVOU','Lynn','Awoungou',87330000,'de3','bu42',067123212)
INSERT INTO Employe VALUES ('A60','LIKIBI','Plamedi','Plein
Ciel',9440000,'de4','bu43',068365781)
INSERT INTO Employe VALUES
('A50','OBAME','Marion','Bikele',15750000,'de3','bu4',069512235)
INSERT INTO Employe VALUES
('A30','AGBUDE','Rebeka','Ambowe',1010000000,'de1','bu42',070543180)

INSERT INTO Bureau VALUES ('bu40','Aviation','de1')


INSERT INTO Bureau VALUES ('bu41','Droit','de1')
INSERT INTO Bureau VALUES ('bu42','Ingenierie','de2')
INSERT INTO Bureau VALUES ('bu43','Mathematiques','de3')
INSERT INTO Bureau VALUES ('bu44','Agriculture','de4')

INSERT INTO Tache VALUES ('ac200','Financement_prj',500,'p5')


INSERT INTO Tache VALUES ('ac201','Gestion_menage',1500,'p10')
INSERT INTO Tache VALUES ('ac202','Creation_Logement',2000,'p15')
INSERT INTO Tache VALUES ('ac203','Planification_Vol',2500,'p20')
INSERT INTO Tache VALUES ('ac204','Creation_Ecole',3000,'p5')
INSERT INTO Tache VALUES ('ac205','Achat_ordinateur',4000,'p25')
INSERT INTO Tache VALUES ('ac206','Auto_Ecole',4500,'p20')

INSERT INTO EXECUTER VALUES ('A20','ac204',2000)


INSERT INTO EXECUTER VALUES ('A40','ac201',1200)
INSERT INTO EXECUTER VALUES ('A10','ac200',1000)
INSERT INTO EXECUTER VALUES ('A60','ac205',650)
INSERT INTO EXECUTER VALUES ('A50','ac202',400)
INSERT INTO EXECUTER VALUES ('A30','ac206',560)

ALTER TABLE Departement ADD FOREIGN KEY (matri-emp) REFERENCES Employe (matri-emp);
ALTER TABLE Projet ADD FOREIGN KEY (code-dept) REFERENCES Departement (code-dept);
ALTER TABLE Projet ADD FOREIGN KEY (matri-emp) REFERENCES Employe(matri-emp);
ALTER TABLE Employe ADD FOREIGN KEY (code-dept) REFERENCES Departement(code-dept);
ALTER TABLE Employe ADD FOREIGN KEY (code-bur) REFERENCES Bureau(code-bur);
ALTER TABLE Employe ADD FOREIGN KEY (code-dept) REFERENCES Departement(code-dept);
ALTER TABLE Employe ADD FOREIGN KEY (num-tel) REFERENCES Telephone(num-tel);
ALTER TABLE Bureau ADD FOREIGN KEY (code-dept) REFERENCES Departement(code-dept);
ALTER TABLE Telephone ADD FOREIGN KEY (code-bur) REFERENCES Bureau(code-bur);
ALTER TABLE Tache ADD FOREIGN KEY (code-proj) REFERENCES Projet(code-proj);
ALTER TABLE Effectuer ADD FOREIGN KEY (matri-emp) REFERENCES Employe (matri-emp);
ALTER TABLE Effectuer ADD FOREIGN KEY (code-tc) REFERENCES Tache (code-tc);

TRAITEMENTS DES QUESTIONS

1)Lister pour chaque d�partement, la liste des projets g�r�s dans le d�partement et
pour chaque projet son responsable (code-dept, lib-dept, code-proj, budget-proj,
nom-emp)
SELECT D.code_dept, lib_dept, code_proj, budget_proj, nom_emp
FROM Employe E, Departement D, Projet P
WHERE E.matri_emp=P.matri-emp AND D.code_dept=P.code_dept;

2)Donner pour chaque d�partement les employ�s qui y travaillent et les bureaux
qu'ils occupent (num-dept, lib-dept, nom-emp, lib-bur, num-tel)
SELECT D.code_dept, lib-dept, nom_emp, lib_bur
FROM Bureau B, Departement D, Employe E
WHERE B.code_bur=E.code_bur AND D.code_dept=E.code_dept;

3)Donner pour chaque d�partement l'effectif des employ�s (code_dept, lib_dept,


effectif_emp)
SELECT D.code_dept, lib_dept, COUNT(matri_emp) as effectif_emp
FROM Employe E, Departement D
WHERE E.code_dept=D.code_dept
GROUP BY D.code_dept, lib_dept;

4)Indiquez le d�partement qui a le plus grand effectif d'employ�s (code-dept, lib-


dept, effectif-emp)
SELECT D.code_dept, lib_dept, COUNT(matri_emp) as effectif_emp
FROM Departement D, Employe E
WHERE D.code-dept=E.code_dept
GROUP BY D.code-dept, lib-dept
HAVING COUNT(matri_emp)= (SELECT MAX(COUNT(matri_emp)) FROM Employe GROUP BY
code_dept);

5)Lister pour chaque employ� les taches r�alis�es dans les projets des d�partements
(nom_emp, code_tc, nbre_heures, code_proj, lib-proj, code-dept)
SELECT nom_emp, T.code_tc, nbre_heures, P.code_proj, lib_proj
FROM Projet P, Tache T, Employe E, Executer ET
WHERE P.code_proj=T.code_proj AND T.code_tc=ET.code_tc AND
ET.matri_emp=E.matri_emp;

6)Lister les projets ou 'NDONG' et 'MAKAYA' ont particip�s ensemple dans ces
projets (code_proj, lib_proj)
SELECT P.code_proj, lib_proj
FROM Projet P, Tache T, Executer ET, Employe E
WHERE nom_emp='MAKAYA' AND ET.matri_emp=E.matri_emp AND ET.code_tc=T.code_tc AND
P.code_proj=T.code_proj
INTERSECT
SELECT P.code_proj, lib_proj
FROM Projet P, Tache T, Executer ET, Employe E
WHERE nom_emp='NDONG' AND ET.matri-emp=E.matri_emp AND ET.code_tc=T.code-tc AND
P.code_proj=T.code_proj;

7)Donner le nom et le prenom de l'employ� qui dirige le d�partement 'Technique'


SELECT nom-emp, prenom_emp
FROM Employe E, Departement D
WHERE E.matri_emp=D.matri_emp AND lib_dept='Technique';

8)Lister les projets qui ont des budgets sup�rieurs � ceux de leur d�partement
(code_proj, budget_proj, code_dept, budget_dept)
SELECT P.code_proj, budget_proj, D.code_dept, budget_dept
FROM Projet P, Departement D
WHERE P.code_dept=D.code_dept AND budget_proj>budget_dept;

9)Indiquez les t�l�phones qui se trouvent dans chaque bureau et les employ�s qui
les utilisent (code_bur, lib_bur, num_tel, nom-emp)
SELECT B.code-bur, lib_bur, TEL.num_tel, nom_emp
FROM Bureau B, Telephone TEL, Employe E
WHERE B.code_bur=TEL.code_bur AND TEL.num_tel=E.num_tel;

10)Indiquer les employ�s qui ont travaill�s dans les projets ou 'OBAME' �tait le
responsable (code_proj, nom_emp, prenom_emp)
SELECT T.code_proj, EM.nom_emp, EM.prenom_emp
FROM Emloye E, Projet P, Tache T, Executer ET, Employe EM
WHERE EM.matri_emp=ET.matri_emp AND ET.code_tc=T.code_tc AND
T.code_proj=P.code_proj AND P.matri_emp=E.matri_emp AND nom_emp='OBAME';

11)Lister dans chaque departement les employ�s qui ont le plus petit salaire, le
salaire maxi et les salaires inf � la moyenne (code-dept, lib-dept, nom-emp,
prenom-emp, salaire-emp)
i)Le plus petit salaire
SELECT D.code-dept, lib_dept, nom_emp, prenom_emp, salaire_emp
FROM Employe E, Departement D
WHERE salaire-emp=(SELECT MIN(salaire-emp) FROM Employe) AND
D.code_dept=E.code_dept;
ii)Le salaire maxi
SELECT D.code_dept, lib_dept, nom_emp, prenom_emp
FROM Employe E, Departement D
WHERE salaire_emp=(SELECT MAX(salaire_emp) FROM Employe) AND
D.code_dept=E.code_dept;
iii)Les salaires inf � la moyenne
SELECT D.code_dept, lib_dept, nom_emp, prenom_emp, salaire_emp
FROM Employe E, Departement D
WHERE salaire_emp=(SELECT AVG(salaire_emp) FROM Employe) AND
D.code_dept=E.code_dept;

12)Lister dans chaque d�artement les employ�s qui gagnent plus que le responsable
du d�partement (nom_emp, salaire_emp)
SELECT nom_emp, salaire_emp
FROM Departement D, Employe E
WHERE D.code_dept=E.code_dept AND salaire_emp>(SELECT salaire_emp FROM Emloye E
WHERE D.matri_emp=E.matri_emp);

13)Donner la liste des responsables de d�partement ainsi que leur salaire


(code_dept, nom_dept, nom_resp, salaire_resp)
SELECT D.code_dept, nom_dept, nom_emp, salaire_emp
FROM Departement D, Employe E
WHERE D.matri_emp=E.matri_emp;

14)Lister le responsable de d�partement qui a le plus gros salaire (code_dept,


lib_dept, nom_resp, salaire_resp)
SELECT D.code_dept, lib_dept, nom_emp, salaire_emp
FROM Departement D, Employe E
WHERE D.matri_emp=E.matri_emp AND salaire_emp=(SELECT MAX(salaire_emp) FROM Employe
E, Departement D WHERE E.matri_emp=D.matri-emp);

15)Combien a cout� l'ensemble des projets r�alis�s dans le d�partement 'Etude'?


(montant)
SELECT SUM(budget-proj) as montant
FROM Departement D, Projet P
WHERE nom_emp='Etude' AND D.code_dept=P.code_dept;

16)Combien a cout� l'ensemble des projets r�alis�s dans le d�partement (code_dept,


lib_dept, cumul_BUDGET_PROJET)
SELECT SUM(budget_proj) as cumul_BUDGET_PROJET, D.code_dept, lib_dept
FROM Departement D, Projet P
WHERE D.code_dept=P.code_dept
GROUP BY D.code_dept;

17)Lister les d�partements qui n'ont pas g�r� de projets (code_dept, lib_dept)
SELECT D.code_dept, lib_dept
FROM Departement D
MINUS
(
SELECT D.code_dept, lib_dept
FROM Departement D, Projet P
WHERE D.code_dept=P.code_dept);

18)Lister les employ�s qui n'ont pas particip� � la r�alisation des projets de leur
d�partement (code_dept, lib_dept, nom_emp, prenom_emp)
SELECT D.code_dept, lib_dept, nom_emp, prenom_emp
FROM Departement D, Employe E
WHERE D.code_dept=E.code_dept AND matri_emp NOT IN(SELECT matri_emp FROM Emloye E,
Tache T, Executer ET WHERE E.matri_emp=ET.matri_emp AND T.code_tc=ET.code_tc AND
E.code_dept=D.code_dept);

19)Lister les projets ou 'MOUSSAVOU' a particip� sans la pr�sence de 'LIKIBI'


(code_proj, lib_proj)
SELECT P.code_proj, lib_proj
FROM Projet P, Tache T, Executer ET, Employe E
WHERE nom_emp='MOUSSAVOU' AND ET.matri_emp=E.matri_emp AND T.code_tc=ET.code_tc AND
P.code_proj=T.code_proj AND P.code-proj NOT IN (SELECT P.code__proj FROM Projet P,
Tache T, Executer ET, Employe E WHERE nom_emp='LIKIBI' AND ET.matri_emp=E.matri_emp
AND T.code_tc=ET.code_tc AND P.code_proj=T.code_proj);

20)Lister les bureau innoccup�s (code_bur, lib_bur)


SELECT code_bur, lib_bur
FROM Bureau
MINUS
(
SELECT B.code_bur,lib_bur
FROM Bureau B, Employe E
WHERE E.code_bur=B.code_bur);

21)Lister les t�l�phones qui ne sont pas utilis�s (num_tel, code_bur)


SELECT num_tel, B.code_bur
FROM Telephone TEL, Bureau B
WHERE TEL.code_bur=B.code_bur AND num_tel NOT IN (SELECT E.num_tel FROM Employe E,
Telephone TEL, Bureau B WHERE TELm_emp.code-bur=B.code-bur AND E.num-tel=TEL.num-
tel);

22)Lister les employ�s qui ont particip� � tous les projets r�alis�s dans leur
d�partement (code_dept, lib_dept, nom_emp, nbre_proj_part, nbre_proj_dept)
SELECT D.code_dept, lib_dept, nom_emp, COUNT(A.code_proj) as nbre-proj_part,
COUNT(B.code_proj) as nbre_proj_dept
FROM Departement D, Projet A, Projet B, Tache T, Executer ET, Employe E
WHERE D.code-dept=E.code_dept AND ET.matri_emp=E.matri_emp AND T.code_tc=ET.code_tc
AND A.code_proj=T.code_proj AND A.code_dept=D.code_dept AND
COUNT(A.code_proj)=COUNT(B.code_proj);

23)Donner le pourcentage des effectifs des d�partements par rapport � l'effectif


total (code-dept, pourcentage)
SELECT a.code-dept as Departement, a.nbre as effectif, a.nbre/b.total*100 as
pourcentage FROM (SELECT code_dept, COUNT(*) as nbre FROM Employe GROUP BY
code_dept)a, (SELECT COUNT(*) as total FROM Employe)b;
24)Transf�rer tous les projets r�alis�s dans le d�partement 'Etude' au d�partement
'Technique'
UPDATE Projet
SET code_dept=(SELECT code_dept FROM Departement WHERE lib_dept='Technique')
WHERE code_dept=(SELECT code_dept FROM Departement WHERE lib_dept='Etude');

25)Supprimer les t�l�phones qui ne sont pas utilis�s


DELETE FROM Telephone
WHERE num-tel NOT IN (SELECT num_tel FROM Employe);

26)Lister le nombre de projets qu'un employ� a particip� dans son d�partement


SELECT COUNT(code_poj) as nbre_proj, nom_emp
FROM Employe E, Executer ET, Tache T
WHERE E.matri_emp=ET.matri_emp AND T.code_tc=ET.code_tc
GROUP BY nom_emp;

27)Lister le nombre de projet dans chaque d�partement


SELECT COUNT(code_proj) as nombre-proj, D.code_dept, lib_dept
FROM Departement D, Projet P
WHERE D.code_proj=P.code_proj
GROUP BY D.code_dept;

You might also like