Académique Documents
Professionnel Documents
Culture Documents
Travaux TP de base
Pratique de de Données
Base de données
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)
Projet
Bureau
Departement
Employé
Téléphone
Tâches
Effectuer
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);
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 );
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);
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;
`
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;