Partiendo del esquema de
Empleados y Departamentos que trae Oracle como ejemplo en el esquema de Scott,
realiza las siguientes consultas:
1.- Listar el nombre de
los empleados que no tienen comisión.
select ename
from
emp
where
comm is null or comm=0;
2.- Mostrar un listado
del código, nombre y gasto de personal (salarios + comisiones) de los
departamentos ordenado por criterio descendente de gasto de personal.
select d.deptno,
dname, nvl(sum(sal+nvl(comm,0)),0) as gasto
from
dept d, emp e
where
e.deptno(+)=d.deptno
group
by d.deptno, dname
order
by gasto desc;
3.- Listar el salario mínimo,
máximo y medio para cada departamento, indicando el código de departamento al
que pertenece el dato.
select deptno,
min(sal), max(sal), round(avg(sal),2)
from
emp
group
by deptno;
4.- Listar el salario
medio de los empleados.
select
round(avg(sal),2)
from
emp;
5.- Listar el nombre de
los departamentos en los que alguno de los salarios es igual o mayor al 25% del
gasto de personal de ese departamento.
select dname
from
dept d
where
deptno in (select deptno
from emp e
where sal > (select 0.25*
sum(sal+nvl(comm,0))
from emp e2
where
e2.deptno=e.deptno));
6.- Listar los
departamentos que tengan algún empleado que gane más de 15.000 euros al año.
(Recuerda que el salario es mensual).
select dname
from
dept
where
deptno in (select deptno
from emp
where sal*12>15000);
7.- Crear la tabla
TEMP(CODEMP, NOMDEPT, NOMEMP, SALEMP) cuyas columnas tienen el mismo tipo y
tamaño que las similares existentes en la BD. Insertar en dicha tabla el código
de empleado, nombre de departamento, nombre de empleado y salario de los
empleados de los departamentos de DALLAS mediante una consulta de datos
anexados.
create table temp
(
codemp number,
nomdept
varchar2(20),
nomemp
varchar2(20),
salemp
number
);
insert into temp
select empno, dname, ename, sal
from emp e, dept d
where e.deptno=d.deptno
and loc='DALLAS';
)
8.- Incrementar un 10%
los salarios de los empleados que ganen menos de 10.000 euros al año.
update emp
set sal=sal*1.1
where sal*12<10000;
9.- Deshacer la operación
anterior.
rollback;
10.- Mostrar los
departamentos que tienen más de dos personas trabajando en el mismo oficio.
select dname
from emp e, dept d
where e.deptno=d.deptno
group by dname, job
having count(*)>2;
11.- Mostrar el
departamento con menos empleados.
select d.deptno, dname
from emp e, dept d
where e.deptno(+)=d.deptno
group by d.deptno, dname
having count(e.empno)=(select min(count(e2.empno))
from emp e2, dept d2
where e2.deptno(+)=d2.deptno
group by d2.deptno);
12.- Crea la tabla
EMP_A_JUBILAR con las mismas columnas de la tabla EMP e inserta los datos de
los empleados que llevan más de 10 años en la empresa.
create table emp_a_jubilar as select * from emp;
delete emp_a_jubilar;
insert into emp_a_jubilar
select *
from emp
where months_between(sysdate, hiredate)>120;
13.- Muestra los
registros que se encuentran en la tabla EMP y no están en la tabla
EMP_A_JUBILAR, realizando la consulta con operadores de conjuntos.
select *
from emp
minus
select *
from emp_a_jubilar;
14.- Muestra los datos
de los empleados que se encuentran en una de las dos tablas, realizando la
consulta con operadores de conjuntos.
(select *
from emp
minus
select *
from emp_a_jubilar)
union
(select *
from emp_a_jubilar
minus
select *
from emp);
15.- Muestra una lista
de los departamentos con el número de empleados que tiene, pero considerando
que pueden existir departamentos sin empleados, en cuyo caso, debe aparecer un
cero.
select d.deptno, count(empno)
from emp e, dept d
where e.deptno(+)=d.deptno
group by d.deptno
order by d.deptno;
No hay comentarios:
Publicar un comentario