Está en la página 1de 12

PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR

Facultad: Ingeniería Nombre: Juan Carlos Contreras

Escuela: Sistemas Fechas: 04/09/2015

1.- Cree una Base de Datos llamada LABORATORIO1

2.- Cree un usuario USER1 y un grupo llamado ADMIN, asígnele al usuario USER1 al rol ADMIN:

Creación del rol USER1:


Creación del rol ADMIN:
3.- Cree el siguiente modelo de datos:

Empleado (cod_emp smallint, nombre char(32), cargo char(16), cod_jefe smallint, fecha_ing
smalldatetime, fecha_nac smalldatetime, salario smallmoney, n_dept tinyint, genero char(1))
Dept (n_dept, tinyint, nombre_dept char(16))
4.- Asigne permisos de INSERT,UPDATE y DELETE a las tablas anteriores para el rol
ADMINISTRADOR
5.- Inserte varios registros en cada una de las tablas utilizando el usuario USER1.

6.- Escriba en una solo archivo de SQL las siguientes consultas:

a. Listar el nombre, el cargo y el salario de aquellos empleados que no sean los empleados 74
o 76 y cuyo salario sea mayor que todos los promedios de salario de los departamentos que
no sean el departamento de sistemas.
Query:
SELECT nombre, cargo, salario
FROM empleado
where cod_emp not in (74,76) and
salario > all (SELECT avg(salario)
FROM empleado
WHERE n_dept <> 4
GROUP BY n_dept)

b. Listar por departamento (n_dept) y por cargo el número de empleados y el promedio de


los salarios (salario) cuando el total del salario sea mayor a 356 y el número de empleados
sea menor al promedio de empleados por departamento, ordene la lista por número de
empleados en forma descendente.

Query:
SELECT N_DEPT, CARGO, COUNT(COD_EMP), AVG(SALARIO)
FROM EMPLEADO
GROUP BY N_DEPT, CARGO
HAVING SUM(SALARIO)>356 AND COUNT(COD_EMP)< (SELECT AVG (SUB.N_EMP)
FROM (SELECT COUNT(COD_EMP) N_EMP
FROM EMPLEADO
GROUP BY N_DEPT) SUB)
ORDER BY 3 DESC;
c. Listar el nombre, el cargo y el salario de aquellos empleados cuya fecha de ingreso
(fecha_ing) sea mayor o igual que la del empleado (cod_emp) 70 y que su salario sea menor o
igual que cualquiera de los empleados 75, 76 y 78, ordene la lista por salario en forma
descendente y por nombre de empleado en forma ascendente.

Query:
SELECT nombre, cargo, salario
FROM empleado
WHERE fecha_ing >= (SELECT fecha_ing
FROM empleado
WHERE cod_emp = 70) AND
salario <= any (SELECT salario
FROM empleado
WHERE cod_emp
in (75,76,78))
ORDER BY 3 DESC,1;

d. Cuál es el departamento con mayor número de empleadas mujeres y la mayor antigüedad


promedio.
Query:
SELECT a.nombre_dept, count(b.cod_emp)N_empleados,avg
(datediff(yy,b.fecha_nac,getdate())) Edad_promedio
FROM dept a JOIN empleado b
ON a.n_dept = b.n_dept
WHERE genero = 'F'
GROUP BY a.nombre_dept
HAVING count(b.cod_emp) >= all (SELECT count (cod_emp)
FROM empleado
WHERE genero = 'F'
GROUP BY n_dept )
AND avg (datediff(yy, b.fecha_nac,getdate())) >= all (SELECT avg(datediff(yy,
FECHA_NAC,getdate())) FROM
empleado
WHERE genero = 'F'
GROUP BY n_dept )

e. Listar los departamentos cuyo jefe es un hombre.

Query:
SELECT a.cod_emp, a.nombre
FROM empleado b join empleado a
ON b.cod_jefe = a.cod_emp
WHERE a.GENERO = 'm'
GROUP BY a.cod_emp, a.nombre;

f. Listar el número de empleados y la suma de sus salarios por cada jefe (cod_emp y nombre
del jefe). Los empleados que no son jefes o que es lo mismo, no están en la columna cod_jefe
también deben aparecer en el listado

Query:
SELECT b.cod_emp, b.nombre, count(a.cod_emp)Num_empleados, sum(a.salario)salario
FROM empleado a RIGHT JOIN empleado b ON a.cod_jefe = b.cod_emp
GROUP BY b.cod_emp, b.nombre

g. Listar el nombre del empleado, su salario, el nombre del departamento (nombre_dept) al


que pertenece el empleado y el promedio de salarios de su departamento de aquellos
empleados cuyo salario sea menor al promedio de su departamento.
Query:
SELECT nombre,salario, nombre_dept, a.promedio
FROM empleado e, dept d, (SELECT n_dept dpto, avg(salario) promedio
FROM empleado
GROUP BY n_dept ) a
WHERE e.n_dept = d.n_dept and
e.n_dept = a.dpto and
salario <= a.promedio

h. Liste los subtotales de la suma de salarios por departamento (n_dept) y cargo, por
departamento, por cargo; y el total general de la suma de los salarios. (Sugerencia: Investigue
sentencia cube).
Query:
select n_dept ,cargo, sum (salario)
from empleado
group by n_dept,cargo

i. Listar para cada departamento de la empresa: el nombre del departamento (nombre_dept),


el nombre de la persona más joven, su edad y el nombre de la persona con la mayor edad y su
edad.

Query:
SELECT d.nombre_dept,
(SELECT e.nombre
FROM empleado e
WHERE e.n_dept = d.n_dept
AND e.fecha_nac = (SELECT max (e1.fecha_nac)
FROM empleado e1
WHERE e.n_dept = e1.n_dept))MAS_JOVEN,
(SELECT DATEDIFF ( yy , e.fecha_nac ,getdate() )
FROM empleado e
WHERE e.n_dept = d.n_dept
AND e.fecha_nac = (SELECT max (e1.fecha_nac)
FROM empleado e1
WHERE e.n_dept = e1.n_dept))EDAD_JOVEN,
(SELECT e.nombre
FROM empleado e
WHERE e.n_dept = d.n_dept
AND e.fecha_nac = (SELECT min (e1.fecha_nac)
FROM empleado e1
WHERE e.n_dept = e1.n_dept))MAS_VIEJO,
(SELECT DATEDIFF ( yy , e.fecha_nac ,getdate() )
FROM empleado e
WHERE e.n_dept = d.n_dept
AND e.fecha_nac = (SELECT min (e1.fecha_nac)
FROM empleado e1
WHERE e.n_dept = e1.n_dept)) EDAD_VIEJO
FROM dbo.DEPT d
GROUP BY d.n_dept,d.nombre_dept

También podría gustarte