jueves, 14 de agosto de 2014

Realización de consultas. Boletín de Scott



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