You are on page 1of 4

Actividades propuestas Capitulo 5

1) Visualiza los departamentos en los que el salario medio es mayor o igual que la media de todos los salarios. SELECT DEPT_NO, AVG (SALARIO) FROM EMPLE GROUP BY DEPT_NO HAVING AVG (SALARIO)>=(SELECT AVG (SALARIO) FROM EMPLE); 2) Obtn los nombres de departamentos que tengan ms de 4 personas trabajando. SELECT DNOMBRE "Nombre Departamentos" FROM DEPART WHERE DEPT_NO IN (SELECT DEPT_NO FROM EMPLE GROUP BY DEPT_NO HAVING COUNT (*)>4); 3) Analiza lo que ocurre si en lugar de COUNT(E.EMP_NO) ponemos COUNT(*) en la sentencia SELECT anterior. Analiza tambin lo que ocurre si a la derecha de SELECT ponemos E.DEPT_NO en lugar de D.DEPT_NO. SELECT D.DEPT_NO, DNOMBRE, COUNT (*) FROM EMPLE E, DEPART D WHERE E.DEPT_NO (+) = D.DEPT_NO GROUP BY D.DEPT_NO, DNOMBRE; 4) Visualiza los nombres de los alumnos de la tabla ALUM que aparezcan en alguna de estas tablas: NUEVOS y ANTIGUOS. Escribe las distintas formas en que se puede poner la consulta anterior llegando al mismo resultado. 1 Forma de hacerlo: SELECT NOMBRE FROM ALUM WHERE NOMBRE IN (SELECT NOMBRE FROM NUEVOS UNION SELECT NOMBRE FROM ANTIGUOS); 2 Forma de hacerlo: SELECT NOMBRE FROM ALUM WHERE NOMBRE IN (SELECT NOMBRE FROM NUEVOS) OR NOMBRE IN (SELECT NOMBRE FROM ANTIGUOS); 3 Forma de hacerlo: SELECT NOMBRE FROM ALUM INTERSECT (SELECT NOMBRE FROM NUEVOS UNION SELECT NOMBRE FROM ANTIGUOS);

Actividades complementarias
Tablas EMPLE Y DEPART

1- Partiendo de la tabla EMPLE, visualiza por cada oficio de los empleados del
departamento 'VENTAS' la suma de salarios. SELECT DEPT_NO, OFICIO, SUM (SALARIO)"Suma salarios" FROM EMPLE WHERE DEPT_NO= (SELECT DEPT_NO FROM DEPART WHERE DNOMBRE='VENTAS') GROUP BY DEPT_NO, OFICIO ORDER BY SUM (SALARIO);

2- Selecciona aquellos apellidos de la tabla EMPLE cuyo salario sea igual a la media del salario en su departamento.
SELECT APELLIDO FROM EMPLE E1 WHERE SALARIO=(SELECT AVG(SALARIO) FROM EMPLE E2 WHERE E2.DEPT_NO = E1.DEPT_NO GROUP BY DEPT_NO);

3- A partir de la tabla EMPLE, visualiza el nmero de empleados de cada departamento cuyo oficio sea 'EMPLEADO'.
SELECT DEPT_NO "Departamento", COUNT (*) "Empleados con Oficio EMPLEADO" FROM EMPLE WHERE OFICIO='EMPLEADO' GROUP BY DEPT_NO;

4-Desde la tabla EMPLE, visualiza el departamento que tenga mas empleados cuyo oficio sea 'EMPLEADO'.
SELECT DEPT_NO "Departamento", COUNT (*) "Empleados con Oficio EMPLEADO" FROM EMPLE WHERE OFICIO='EMPLEADO' GROUP BY DEPT_NO HAVING COUNT(*)=(SELECT MAX (COUNT(*)) FROM EMPLE WHERE OFICIO='EMPLEADO' GROUP BY DEPT_NO );

5.- A partir de las tablas EMPLE y DEPART, visualiza el numero de departamento y el nombre de departamento que tenga mas empleados cuyo oficio sea 'EMPLEADO'.
SELECT DNOMBRE "Nombre Departamento", E.DEPT_NO "Departamento", COUNT (*) "Empleados con Oficio EMPLEADO" FROM EMPLE E, DEPART D WHERE E.DEPT_NO=D.DEPT_NO AND OFICIO='EMPLEADO' GROUP BY E.DEPT_NO, DNOMBRE HAVING COUNT(*)=(SELECT MAX (COUNT(*)) FROM EMPLE WHERE OFICIO='EMPLEADO' GROUP BY DEPT_NO );

6.- Busca los departamento que tienen mas de dos personas trabajando en la misma profesin.
SELECT DNOMBRE FROM DEPART WHERE DEPT_NO=(SELECT DISTINCT (DEPT_NO) FROM EMPLE GROUP BY EMPLE.DEPT_NO, OFICIO HAVING COUNT(*)>2);

7- Visualizar los nombres de los alumnos de la tabla ALUM que aparezcan en alguna de estas tablas: NUEVOS y ANTIGUOS.
select nombre from alum intersect (select nombre from nuevos union select nombre from antiguos);

8- Escribir las distintas formas en que se puede poner la consulta anterior llegando al mismo resultado
*select nombre from alum where nombre in(select nombre from nuevo) union select nombre from antiguo); *select nombre from alum where nombre in (select nombre from nuevo) or nombre in (select nombre from antiguo);

9) Visualizar los nombres de los alumnos de la tabla alum que aparezcan en estas dos tablas: antiguos y nuevos
select nombre from alum intersect select nombre from antiguos intersect select nombre from nuevos;

Tablas ALUM, ANTIGUOS Y NUEVOS

10.- Realiza una consulta en la que aparezca por cada centro y en cada especialidad el numero de profesores. Si el centro no tiene profesores, debe aparecer un 0 en la columna de numero de profesores. Las columnas a visualizar son: nombre de centro, especialidad y numero de profesores.
SELECT NOMBRE "Centro", ESPECIALIDAD "Especialidad", COUNT (DNI)"Profesores" FROM CENTROS C, PROFESORES P WHERE C.COD_CENTRO =P.COD_CENTRO (+) GROUP BY NOMBRE, ESPECIALIDAD ORDER BY COUNT (DNI) DESC;

11.- Obtn por cada centro el numero de empleados. Si el centro carece de empleados, ha de aparecer un 0 como numero de empleados.
SELECT NOMBRE "Centro", COUNT (DNI)"Profesores" FROM CENTROS C, PERSONAL P WHERE C.COD_CENTRO =P.COD_CENTRO (+) GROUP BY NOMBRE ORDER BY COUNT (DNI) DESC;

12.- Obtener la especialidad con menos profesores.


SELECT ESPECIALIDAD FROM PROFESORES GROUP BY ESPECIALIDAD HAVING COUNT (*) = (SELECT MIN (COUNT (*)) FROM PROFESORES GROUP BY ESPECIALIDAD); Tablas BANCOS, SUCURSALES, CUENTAS y MOVIMIENTOS

13.- Obtn el banco con ms sucursales. Los datos a obtener son: Nombre de Banco NSucursales xxxxx xxx
SELECT NOMBRE_BANC "BANCO", COUNT (*) "Sucursales" FROM BANCOS B, SUCURSALES S WHERE B.COD_BANCO=S.COD_BANCO GROUP BY NOMBRE_BANC HAVING COUNT (*) = (SELECT MAX (COUNT(*)) FROM BANCOS B, SUCURSALES S WHERE B.COD_BANCO=S.COD_BANCO GROUP BY NOMBRE_BANC);

14.- El saldo actual de los bancos de 'GUADALAJARA', 1 fila por cada banco. Nombre de Banco, Saldo Debe, Saldo Haber
SELECT B.NOMBRE_BANC "Nombre Banco", SUM (SALDO_DEBE) "Saldo Debe", SUM (SALDO_HABER) "Saldo Haber" FROM BANCOS B, CUENTAS C WHERE B.COD_BANCO = C.COD_BANCO AND POBLACION = 'GUADALAJARA' GROUP BY B.NOMBRE_BANC;

15.- Datos de la cuenta o cuentas con ms movimientos. Nombre, Cta Nmovimientos


SELECT M.NUM_CTA "Numero Cta", NOMBRE_CTA "NOMBRE Cta", COUNT(*) "N Movimientos" FROM MOVIMIENTOS M, CUENTAS C WHERE M.NUM_CTA=C.NUM_CTA AND C.COD_SUCUR=M.COD_SUCUR AND C.COD_BANCO=M.COD_BANCO GROUP BY M.NUM_CTA, NOMBRE_CTA HAVING COUNT(*)=(SELECT MAX (COUNT (*)) FROM MOVIMIENTOS GROUP BY NUM_CTA);

16.- El nombre de la sucursal que haya tenido ms suma de reintegros. Nombre Sucursal Suma Reintegros
SELECT S.NOMBRE_SUC, SUM (IMPORTE) "Suma Reintegros" FROM SUCURSALES S, MOVIMIENTOS M WHERE S.COD_BANCO = M. COD_BANCO AND S.COD_SUCUR = M. COD_SUCUR and M.TIPO_MOV = 'R' GROUP BY NOMBRE_SUC HAVING SUM(IMPORTE) = (SELECT MAX( SUM (IMPORTE)) FROM MOVIMIENTOS M WHERE M.TIPO_MOV = 'R' GROUP BY COD_BANCO, COD_SUCUR);