Sunteți pe pagina 1din 6

Université Saad Dahlab Blida – Corrigé indicatif

Faculté de Science – Département d’Informatique


L2 Bases de Données – 2019/20 TD N°4: Algèbre relationnelle et SQL

Exercice 1
EMPLOYES (Id, Nom, Age, Salaire, Profession, #Dep)
DEPARTEMENT (Id_Dep, Nom_Dep)

EMPLOYES Id Nom Age Salaire Profession Dep DEPARTEMENT Id_Dep Nom_Dep


1 Ismail 25 6000.00 Assistant 2 1 Informatique
2 Mohamed 30 8000.40 Directeur 1 2 RH
3 Fatima 29 6000.00 Directeur 3 3 Vente
4 Dounia 30 7000.00 Assistant 4 4 Stratégies
5 Omar 29 9000.00 Ingenieur 1
7 Mostapha 29 9000.00 Ingenieur NULL

Donner le résultat des requêtes SQL suivantes:

1. SELECT * FROM Departement CROSS JOIN Employes;


Id_Dep Nom_Dep Id Nom Age Salaire Profession Dep
1 Informatique 1 Ismail 25 6000.00 Assistant 2
2 RH 1 Ismail 25 6000.00 Assistant 2
3 Vente 1 Ismail 25 6000.00 Assistant 2
4 Stratégies 1 Ismail 25 6000.00 Assistant 2
1 Informatique 2 Mohamed 30 8000.40 Directeur 1
2 RH 2 Mohamed 30 8000.40 Directeur 1
3 Vente 2 Mohamed 30 8000.40 Directeur 1
4 Stratégies 2 Mohamed 30 8000.40 Directeur 1
1 Informatique 3 Fatima 29 6000.00 Directeur 3
2 RH 3 Fatima 29 6000.00 Directeur 3
3 Vente 3 Fatima 29 6000.00 Directeur 3
4 Stratégies 3 Fatima 29 6000.00 Directeur 3
1 Informatique 4 Dounia 30 7000.00 Assistant 4
2 RH 4 Dounia 30 7000.00 Assistant 4
3 Vente 4 Dounia 30 7000.00 Assistant 4
4 Stratégies 4 Dounia 30 7000.00 Assistant 4
1 Informatique 5 Omar 29 9000.00 Ingenieur 1
2 RH 5 Omar 29 9000.00 Ingenieur 1
3 Vente 5 Omar 29 9000.00 Ingenieur 1
4 Stratégies 5 Omar 29 9000.00 Ingenieur 1
1 Informatique 7 Mostapha 29 9000.00 Ingenieur NULL
2 RH 7 Mostapha 29 9000.00 Ingenieur NULL
3 Vente 7 Mostapha 29 9000.00 Ingenieur NULL
4 Stratégies 7 Mostapha 29 9000.00 Ingenieur NULL

2. SELECT count(Dep) FROM Employes;


count(Dep)
5

3. SELECT Id, Nom FROM Employes WHERE Salaire>7000 AND age BETWEEN 25 AND 30;
Id Nom
2 Mohamed
5 Omar
7 Mostapha

4. SELECT * FROM Employes ORDER BY Age DESC, Nom ASC;


Id Nom Age Salaire Profession Dep
4 Dounia 30 7000.00 Assistant 4
2 Mohamed 30 8000.40 Directeur 1
3 Fatima 29 6000.00 Directeur 3
7 Mostapha 29 9000.00 Ingenieur NULL
5 Omar 29 9000.00 Ingenieur 1
1 Ismail 25 6000.00 Assistant 2
5. SELECT D.Nom_dep, AVG(E.Salaire) AS "Salaire moyen"
FROM Employes AS E INNER JOIN Departement AS D
ON E.Dep=D.Id_dep
GROUP BY D.Nom_dep
HAVING AVG(E.Salaire) > 6000;

Nom_Dep Salaire moyen

Informatique 8500.20
Stratégies 7000.00

6. SELECT Nom_dep FROM Departement


WHERE ID_dep IN (SELECT DISTINCT E.Dep FROM Employes AS E INNER JOIN Participer AS P ON
E.Id=P.Emp);
Nous n'avons pas la relation PARTICIPER

7. SELECT Nom FROM Employes


WHERE Id NOT IN (SELECT DISTINCT Emp FROM Participer);
Nous n'avons pas la relation PARTICIPER
Exercice 2
On considère le schéma relationnel suivant:
La relation des Employés (EMP)
EMP(ENO, ENOM, PROF, DATEEMB, SAL, COMM, #DNO)
ENO : numéro d’employé, clé
ENOM : nom de l’employé
PROF : profession (directeur n’est pas une profession)
DATEEMB : date d’embauche
SAL : salaire
COMM : commission (un employé peut ne pas avoir de commission)
DNO : numéro de département auquel appartient l’employé

Relation des Départements (DEPT)


DEPT(DNO, DNOM, DIR, VILLE)
DNO : numéro de département, clé
DNOM : nom du département
DIR : directeur du département
VILLE : lieu du département (ville)
Exprimer les requêtes suivantes par un arbre algébrique, en algèbre relationnelle et en SQL.

Exemple: Les dates d’embauche des techniciens.


L'arbre algébrique:
Resultat

DATEEMB

PROF='TECHNICIEN

EMP

Algèbre : πDATEEMB(σPROF='TECHNICIEN'(EMP))

SQL : SELECT DATEEMB FROM EMP WHERE PROF=’TECHNICIEN’;

1. Les noms des employés et les noms de leur département.


R

R= πENOM,DNOM(EMP⋈DEPT) ENOM DNOM

select ENOM, DNOM from EMP, DEPT where EMP.DNO=DEPT.DNO;



EMP DEPT

R
2. Les numéros des employés travaillant à BOSTON.

ENO

πENO( EMP⋈ σVILLE='BOSTON'(DEPT))


R=

EMP R1
select ENO from EMP, DEPT
where EMP.DNO=DEPT.DNO and VILLE='BOSTON';
VILLE='BOSTON'

DEPT
3. Les noms des directeurs des départements 1 et 3. (Attention : directeur n’est pas une profession)

R= πENOM(σDEPT.DNO=1 v DEPT.DNO=3( EMP⋈ EMP.DNO=DEPT.DIR(DEPT))


ENOM

select ENOM from EMP,DEPT


where (DEPT.DNO=1 v DEPT.DNO=3) ^ (EMP.DNO=DEPT.DIR ); DEPT.DNO=1 v DEPT.DNO=3

ou
select ENOM from EMP,DEPT ⋈
EMP.DNO=DEPT.DIR
where DEPT.DNO in (1,3) ^ EMP.DNO=DEPT.DIR ;
EMP DEPT

4. Les noms des employés et les noms de leurs directeurs.


R

 les départements avec les noms de leur directeur


ENOM, DIRNOM
(l'attribut ENOM est renommé en DIRNOM)

R1=πENOM/DIRNOM,DNO( EMP⋈ EMP.DNO=DEPT.DIR(DEPT) ⋈


 les employés avec les numéros de leur département R1 R2

R2=πENOM,DNO( EMP)
ENOM/DIRNOM, DNO ENOM, DNO
 les noms des employés avec les noms de directeur

R=πENOM,DIRNOM( R1⋈R2) ⋈
EMP.DNO=DEPT.DIR
EMP

EMP DEPT
select E1.ENOM, E2.ENOM from EMP E1, EMP E2, DEPT D
where E1.DNO=D.DNO ^ E2.ENO = D.DIR;

5. Les départements qui n’ont pas d’employés. R

R = DEPT-(DEPT ⋈EMP) -

select * from DEPT where DNO not in (select DNO from EMP);

DEPT
DEPT EMP
6. Les noms des employés embauchés avant tous les employés du département 1. R

R1 = πDATEEMB(σDNO=1(EMP)) -
R2= EMP ⋈ EMP.DATEEMB > R1.DATEEMB R1
EMP R2
R = πENOM(EMP – R2)

select ENOM from EMP E1 where ⋈


EMP.DATEEMB > R1.DATEEMB

DATEEMB < ALL (select DATEEMB from EMP E2 where DNO=1);


EMP R1

DATEEMB

DNO=1

EMP

S-ar putea să vă placă și