create
table dept
(deptno
numeric(2) constraint pk_dept primary key,
dname
varchar(30) not null,
loc
varchar(20) not null);
create
table emp
(empno
numeric(4) constraint pk_emp primary key,
ename
varchar(30) not null,
job
varchar(30) not null,
mgr
numeric(4),
hiredate
date not null,
sal
numeric (8,2) not null,
comm numeric(8,2),
deptno
numeric(2) not null constraint fk_emp references
dept(deptno));
1)
Obtenir les départements (numéro, nom) ayant des employés.
Select d.deptno,
dname
From dept d, emp
e
Where e.deptno = d.deptno
;
Ou
Select d.deptno,
dname
From dept d
Inner join emp e On
e.deptno = d.deptno;
2)
Donner la liste des employés (numéro, nom) non vendeurs.
Select empno,
ename
From emp
Where job !=
'SALESMAN';
3)
Donner les employés embauchés entre le 01-01-1981 et le
30-06-81.
Select empno,
ename
From emp
Where hiredate between
'1981-01-01' and '1981-06-30';
4)
Donner le salaire le plus élevé et le salaire le plus bas par
département et job.
Select dname, job,
max(sal) as Maximum, min(sal) as Minimum
From emp e
Inner join dept d On
e.deptno = d.deptno
Group by dname,
job;
5)
Donner pour chaque département : son nom, le nombre d’employés et
la moyenne des salaires.
Select dname,
count(*), avg(sal)
From emp e
Inner join dept d On
e.deptno = d.deptno
Where e.deptno =
d.deptno
Group by
dname;
6)
Donner le montant total des commissions des vendeurs.
Select sum(comm) as
Total_Commissions
From emp
Where job = '
SALESMAN';
7)
Donner La liste des employés (son nom, sa fonction et le nom de son
département) par ordre alphabétique.
Select ename, job,
dname
From emp e
Inner Join dept d On
e.deptno = d.deptno
Order by
ename;
8)
Donner le nom et le job de la dernière personne embauchée dans le
département ‘ACCOUNTING’.
Select ename,
job
From emp e
Inner Join dept d On
e.deptno = d.deptno
And
dname='ACCOUNTING'
And hiredate =
(select
max(hiredate)
From emp
e
Inner
Join dept d On e.deptno = d.deptno
And
dname='ACCOUNTING');
9)
Lister les employés (no, nom) dont le salaire est supérieur à la
moyenne des salaires.
Select empno,
ename
From emp
Where sal >
(select
avg(sal)
from emp);
10) Donner le nombre
d’employés n’ayant pas de responsable.
Select
count(*)
From emp
Where mgr is
null;
11) Donner la liste des
employés (numéro, nom et job) avec le nom de leur responsable.
Select e1.empo, e1.ename,
e1.job, e2.ename
From emp e1
Inner Join emp e2 On
e1.mgr = e2.empo
12) On peut constater que
le chef ne figure pas dans la liste de la question précédente
(c'est logique car il n'a pas de responsable), il est demandé de
l'ajouter dans cette liste (penser à UNION).
Select e1.empo, e1.ename,
e1.job, e2.ename
From emp e1
Inner Join emp e2 On
e1.mgr = e2.empo
Union
Select empno, ename, job,
NULL
From emp
Where mgr is
NULL;
13) Donner la liste des employés dont le nom
commence par A.
Select empno,
ename
From emp
Where ename like '
A%';
14) Donner la liste des
employés (numéro, nom) avec leur salaire total ordonnée sur le nom
de l'employé ; attention si on ajoute NULL à un nombre, le
résultat vaut NULL.
Select empno, ename,
sal
From emp
Where job != '
SALESMAN'
Union
Select empno, ename, sal
+ comm
From emp
Where job = '
SALESMAN'
Order by
ename;
15) Augmenter les salaires
des vendeurs de 1%.
Update emp
Set sal = sal *1.01
Where job =
'SALESMAN';
16) Insérer un département
(la seule contrainte est que le numéro doit être égal au dernier +
10).
Insert into dept
values(
(Select (max(d.deptno) +
10) from dept d), 'INFORMATIQUE', 'NEW-YORK');