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