Vous êtes sur la page 1sur 22

Ministère de l’éducation national Libreville le 17 mars2023

Université de BISSEGUE Par : AMEGNINOU Afiwa Bénédicte

Département de Base de données

Travaux TP de base
Pratique de de Données
Base de données

Option: informatique licence 2

Travail à faire : Création d’une base de données ‘Gestion des projet’


et insertion des données dans les tables puis traduction des
requêtes en SQL via Wampserver

SUPERVISEUR: Dr Ange NAMBILA


Présentation du travail

1. Schéma relationnel
2. Création des tables
3. Insertion des données
4. Affichage des données de chaque table
5. Requêtes en algèbre relationnel et traduction en
SQL
1. Schéma relationnel
Département: (code_dept, lib_dept, budget_dept, #matri_emp)
Projet: (code_proj, lib_proj, budget_proj, #matri_emp, #code_dept)
Bureau: (code_bur, lib_bur, #code_dept)
Employé: (matri_emp, nom_emp, prénom_emp, adr_emp, sexe_emp, #code_dept,
#code_bur , #num_tel)
Téléphone: (num_tel, #code_bur)
Tâches: (code_tc, lib_tc, cout_unit_tc, #code_proj)
Exécuter: (#matri_emp, #code_tc, nb_heur_eff)

2. Création des tables


CREATE TABLE Departement (
code_dept varchar(10) PRIMARY KEY,
lib_dept varchar(20) NOT NULL,
budget_dept INT NOT NULL,
matri_emp varchar(10)NOT NULL);

CREATE TABLE Projet (


code_proj varchar(10) PRIMARY KEY,
lib_proj varchar(20) NOT NULL,
budjet_proj INT NOT NULL,
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)NOT NULL ,
adresse_emp varchar (30) NOT NULL,
salaire_emp INT NOT NULL,
code_dept varchar(10) NOT NULL,
code_bur varchar(10) NOT NULL,
num_tel INT NOT NULL);

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 NOT NULL,
code_proj varchar(10) NOT NULL);
CREATE TABLE Effectuer (
matri_emp varchar(10),
code_tc varchar(10),
Nbr_heur_eff INT NOT NULL,
PRIMARY KEY(matri_emp,code_tc));

3. Insertion des données

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


INSERT INTO Departement VALUES ('de2','Mathematiques',5000000,'A50')
INSERT INTO Departement VALUES ('de3','Informatique',10000000,'A40')
INSERT INTO Departement VALUES ('de4','Etude',6000000,'A20')
INSERT INTO Departement VALUES ('de5','Musique',8000000,'A30')

INSERT INTO Projet VALUES ('p5','Developpement',150000000,'de4','A50')


INSERT INTO projet VALUES ('p10','Construction',50000000,'de1','A40')
INSERT INTO Projet VALUES ('p15','Amenagement',30000000,'de1','A20')
INSERT INTO Projet VALUES ('p20','Gestion_ordure',20000000,'de1','A10')
INSERT INTO Projet VALUES ('p25','Sante',100000000,'de2','A09')
INSERT INTO Projet VALUES ('p30','Sante',100000000,'de1','A10')
INSERT INTO Projet VALUES ('p35','Sante',100000000,'de2','A30')
INSERT INTO Projet VALUES ('p40','Sante',100000000,'de2','A40').
INSERT INTO Projet VALUES ('p45','Armement',700000000,'de2','A40')
INSERT INTO Projet VALUES ('p50','agronomie',7000000,'de2','A40')
INSERT INTO Projet VALUES ('p55','hotelerie',350000000,'de2','A40')
INSERT INTO Projet VALUES ('p60','restauration',130000000,'de2','A40')
INSERT INTO Projet VALUES ('p65','tourisme',100000000,'de2','A40')
INSERT INTO Employe VALUES
('A09','NDONG','Djeffry','D.P',10550000,'de1','bu40',066456890)
INSERT INTO Employe VALUES
('A10','MAKAYA','Benedicte','Alibandeng',5620000,'de2','bu40',065236789)
INSERT INTO Employe VALUES
('A20','MOUSSAVOU','Lynn','Awoungou',873300,'de2','bu40',067123212)
INSERT INTO Employe VALUES
('A30','LIKIBI','Plamedi','Plein Ciel',9440000,'de4','bu43',068365781)
INSERT INTO Employe VALUES
('A40','OBAME','Marion','Bikele',1575000,'de3','bu44',069512235)
INSERT INTO Employe VALUES
('A50','AGBUDE','Rebeka','Ambowe',10000000,'de2','bu45',070543180)
INSERT INTO Employe VALUES
('A60','MINKO','Eloge','Awendje',3500000,'de3','bu44',070543181)
INSERT INTO Employe VALUES ('A70','AKWE','Patale','PK8',1700000,'de3','bu41',070543189)
INSERT INTO Employe VALUES
('A80','AMVAME','Felix','Ambowe',1010000,'de1','bu43',070543187)

INSERT INTO Telephone VALUES (066456890,'bu40')


INSERT INTO Telephone VALUES (065236789,'bu40')
INSERT INTO Telephone VALUES (067123212,'bu40')
INSERT INTO Telephone VALUES (068365781,'bu43')
INSERT INTO Telephone VALUES (069512235,'bu44')
INSERT INTO Telephone VALUES (070543180,'bu45')
INSERT INTO Telephone VALUES (070543181,'bu44')
INSERT INTO Telephone VALUES (070543189,'bu41')
INSERT INTO Telephone VALUES (070543187,'bu43')
INSERT INTO Telephone VALUES (070543190,'bu46')
INSERT INTO Telephone VALUES (070543167,'bu47')
INSERT INTO Telephone VALUES (070543135,'bu42')
INSERT INTO Bureau VALUES ('bu40','Bur_aviation','de1')
INSERT INTO Bureau VALUES ('bu41','Bur_aviation','de3')
INSERT INTO Bureau VALUES ('bu42','Bur_ingenierie','de4')
INSERT INTO Bureau VALUES ('bu43','Bur_mathematiques','de2')
INSERT INTO Bureau VALUES ('bu44','Bur_agriculture','de2')
INSERT INTO Bureau VALUES ('bu45','Bur_agriculture','de3')
INSERT INTO Bureau VALUES ('bu46','Bur_agriculture','de4')
INSERT INTO Bureau VALUES ('bu47','Bur_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 Effectuer VALUES ('A20','ac204',2000)


INSERT INTO Effectuer VALUES ('A40','ac201',1200)
INSERT INTO Effectuer VALUES ('A10','ac200',1000)
INSERT INTO Effectuer VALUES ('A60','ac205',650)
INSERT INTO Effectuer VALUES ('A50','ac202',400)
INSERT INTO Effectuer 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 (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);

4. Affichage des données de chaque table

Projet
Bureau

Departement
Employé

Téléphone
Tâches

Effectuer

5. Requêtes en algèbre relationnel et traduction en SQL

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(E.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, COUNT(E.matri_emp) as effectif_emp
FROM Departement D, Employe E
WHERE D.code_dept=E.code_dept
GROUP BY D.code_dept
HAVING COUNT(E.matri_emp) >= ALL (SELECT 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, nbr_heur_eff, P.code_proj, lib_proj
FROM Projet P, Tache T, Employe E, Effectuer 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, Effectuer ET, Employe E WHERE E.nom_emp='MAKAYA' AND
ET.matri_emp=E.matri_emp AND ET.code_tc=T.code_tc AND P.code_proj=T.code_proj
AND p.code_proj IN (SELECT P.code_proj
FROM Projet P, Tache T, Effectuer ET, Employe E WHERE E.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, budjet_proj, D.code_dept, budget_dept
FROM Projet P, Departement D
WHERE P.code_dept=D.code_dept AND budjet_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, E.nom_emp, E.prenom_emp
FROM Employe E, Projet P, Tache T, Effectuer ET
WHERE E.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 département 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, salaire_emp
FROM Employe E, Departement D
WHERE D.matri_emp=E.matri_emp AND salaire_emp=(SELECT MIN(salaire_emp) FROM
Employe E,Departement D WHERE E.matri_emp=D.matri_emp );

ii)Le salaire maxi


SELECT D.code_dept, lib_dept, nom_emp, salaire_emp
FROM Employe E, Departement D
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 );

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 WHERE
D.code_dept=E.code_dept);

12)Lister dans chaque département 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 Employe 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, lib_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(budjet_proj) as montant
FROM Departement D, Projet P
WHERE lib_dept='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(budjet_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
WHERE D.code_dept NOT IN
(
SELECT D.code_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 E.matri_emp NOT IN(SELECT E.matri_emp FROM
Employe E, Tache T, Effectuer 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, Effectuer ET, Employe E
WHERE E.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, Effectuer ET, Employe E WHERE
E.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 inoccupés (code-bur, lib-bur)


SELECT code_bur, lib_bur
FROM Bureau
WHERE code_bur
NOT IN(SELECT B.code_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 TEL.num_tel FROM
Employe E, Telephone TEL, Bureau B WHERE TEL.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_proj) as nbre_proj, E.nom_emp
FROM Employe E, Effectuer 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_dept=P.code_dept
GROUP BY D.code_dept;

Vous aimerez peut-être aussi