Está en la página 1de 4

Examen Final de Base de Datos. Duración 90’. 6 setiembre 2020. Responder solo 20 puntos.

Apellidos: Fiorela Huarcaya Gonzales

ESQUEMA 1 Sistema RELACIONAL con 4 tablas cuyo significado es el de una base de datos de Proveedores
(Tabla S), Piezas (Tabla P), Proyectos (Tabla J) y la tabla que relaciona a los proveedores que suministran
ciertas cantidades de piezas a los proyectos (Tabla SPJ).
S = (S#, nomprov, domicilio, ciudad)
P = (P#, nompiez, color)
J = (J#, nomproy, duración, ciudad)
SPJ = (S#, P#, J#, cantidad)
donde S#, P# y J# son los códigos de los proveedores, piezas y proyectos respectivamente. Las claves de cada
tabla aparecen en negrita y subrayado
1. [0.5 ptos] ¿Qué permite obtener la siguiente consulta? (MARCAR LA(s) CORRECTAS)
SELECT DISTINCT P# FROM SPJ GROUP BY S# HAVING AVG (cantidad) > 320;
A) Obtener los p# de las piezas suministradas tales que la cantidad promedio sea mayor que 320.
B) Obtener los p# de las piezas suministradas a algún proyecto tales que la cantidad promedio
suministrada de esa pieza a ese proyecto sea mayor que 320.
C) Obtener los p# de las piezas cuyo promedio de suministro sea mayor que 320.
D) Ninguna de las anteriores.
2. [0.5 ptos] ¿Cual de las siguientes consultas en SQL contesta a la pregunta "Obtener los P# de las
piezas suministradas a algún proyecto tales que la cantidad media suministrada al mismo sea
mayor que 320" utilizando el ESQUEMA 1?
A) SELECT DISTINCT P# FROM SPJ GROUP BY P# WHERE AVG(cantidad) > 320;
B) SELECT DISTINCT P# FROM SPJ WHERE AVG(cantidad) > 320; GROUP BY P#
C) SELECT DISTINCT P# FROM SPJ GROUP BY P#, J# HAVING AVG(cantidad) > 320;
D) SELECT DISTINCT P# FROM SPJ GROUP BY J# HAVING AVG(cantidad) > 320;

3. [0.5 ptos] ¿Cuál de las siguientes consultas en SQL contesta a la pregunta "Obtener los S# de los
proveedores que suministren por lo menos alguna de las piezas suministradas por alguno de los
proveedores que suministran alguna pieza “ utilizando el ESQUEMA 1?.
A) SELECT DISTINCT S# FROM SPJ WHERE P# IN (SELECT P# FROM SPJ WHERE S# IN (SELECT S# FROM SPJ
WHERE P# IN (SELECT P# FROM P);
B) SELECT DISTINCT S# FROM SPJ WHERE P# IN (SELECT P# FROM P WHERE S# IN (SELECT S# FROM S
WHERE P# IN (SELECT P# FROM P);
C) SELECT DISTINCT S# FROM SPJ WHERE P# IN (SELECT P# FROM P);
D) Ninguna de las anteriores
4. [0.5 ptos] Utilizando el ESQUEMA 1. ¿Qué permite obtener la siguiente consulta?
SELECT DISTINCT j# FROM j WHERE ciudad=”Trujillo” AND s# IN (SELECT j# FROM j WHERE ciudad =
“Lima”);
A) Obtener los j# de los proyectos que son de “Trujillo” o de “Lima”
B) Obtener los j# de los proyectos que son de “Trujillo” y algunos de “Lima”
C) Obtener los j# de los proyectos que son de “Trujillo” y de “Lima”
D) Ninguna de las anteriores.
ESQUEMA 2 Sistema RELACIONAL con 2 tablas cuyo significado es el de una base de datos de Empleados
(Tabla E), y la tabla de Departamentos (D) donde trabajan los empleados
E = (EMP_NRO#, APELLIDO, OFICIO, DIRECTOR, FECHA_INGRESO, SALARIO, COMISION, DEP_NRO#)
D = (DEP_NRO#, DNOMBRE, CIUDAD)
donde EMP_NRO#, DEP_NRO# son los códigos de los Empleados y Departamentos respectivamente. Las claves
de cada tabla aparecen en negrita y subrayado

Construir consultas SQL con subconsultas para (DESARROLLAR)


5. [1 pto] lista de empleados cuyo salario supere el salario medio
SELECT EMP_NRO#, APELLIDO, OFICIO, SALARIO
FROM E WHERE SALARIO > (SELECT AVG(SALARIO) FROM E) ;

6. [1 pto] Obtener todos los empleados que tienen el mismo oficio que ‘Javier’.
SELECT EMP_NRO#, APELLIDO FROM E
WHERE OFICIO IN (SELECT OFICIO FROM E WHERE APELLIDO = ‘Javier’)
AND APELLIDO <>’Javier’;
Se resalta APELLIDO porque no existe el ATRIBUTO Nombre

7. [1 pto] Obtener información de los empleados que ganan más que cualquier empleado del departamento 30.
SELECT EMP_NRO#, APELLIDO, OFICIO, SALARIO
FROM E WHERE SALARIO > ALL (SELECT SALARIO FROM E WHERE DEP_NRO# = 30);

8. [2 pto] Visualizar el número de vendedores del departamento de ventas.


SELECT COUNT (*) FROM E JOIN D ON (E. DEP_NRO# = D.DEP_NRO#)
WHERE DNOMBRE = ‘Ventas’;

9. [2 ptos] Listar, en orden alfabético, aquellos empleados que no trabajen ni en Trujillo ni en Lima.
SELECT EMP_NRO#, APELLIDO, OFICIO
FROM E JOIN D
ON (E. DEP _NRO# = D. DEP_NRO#)
WHERE CIUDAD <> ‘Trujillo’ AND CIUDAD <> ‘Lima’
ORDER BY APELLIDO;

10.[2 ptos] Listar los nombres de los departamentos que tengan algún empleado con fecha de alta anterior a 1982.
SELECT DNOMBRE FROM E JOIND D
ON (E.DEP _NRO# = D.DEP _NRO#)
WHERE FECHA_INGRESO <’01-01-1982’;
Dado que no existe FECHA_ALTA, se considera FECHA_INGRESO

11.[2 ptos] Obtener los departamentos y sus nombres, siempre que haya más de un empleado trabajando en ellos.
SELECT DEP_NRO#, DNOMBRE FROM D
WHERE DEP_NRO# IN (SELECT DEP_NRO# FROM E
HAVING COUNT(EMP_NRO#)>1 GROUP BY DEP_NRO#);
12.[3 ptos] Normalizar en 1FN, 2FN y 3FN el siguiente documento

13.[2 ptos] En HR de Oracle, consulta para identificar a todos los empleados que ganan menos que el promedio y que
trabajan en cualquiera de los departamentos de TI.
SELECT employee_id, first_name, last_name FROM Employees
WHERE salary < (SELECT AVG(salary) from Employees)
AND job_id LIKE 'IT%';

14.[3 ptos] En HR de Oracle, Mostrar el nombre del país, ciudad y cantidad de departamentos que tienen más de 5
empleados.
SELECT country_name, city, COUNT(department_ID)
FROM Countries JOIN Locations USING (country_ID) JOIN Departments USING (Location_ID)
WHERE department_ID IN (SELECT department_ID FROM Employees
GROUP BY department_ID
HAVING COUNT(department_ID)>5)
GROUP BY Country_Name, City;

15.[2 puntos] Crear una función en PL/SQL que reciba el ID del departamento y retorne el nombre del jefe del
departamento

CREATE OR REPLACE FUNCTION nombreJefe(idD IN number)


RETURN varchar IS
nombreJ varchar(30);
BEGIN
SELECT first_name INTO nombreJ FROM Employees E JOIN Departments D
ON (D.manager_id = E.employee_id)
WHERE D.department_id = idD;
RETURN nombreJ;
END;
/
16.[4 ptos] Se desea modelar la participación de atletas a diferentes competiciones como ser 5k, 10k, y maratones entre
otras, llevando registros de los tiempos y las posiciones obtenidas en las diferentes temporadas. Las mismas se
realizan en distintas ciudades y países.
De los atletas o jugadores se registrará el documento (tipo y número) que lo identifica de manera única, el nombre, la
fecha de nacimiento, dirección y teléfonos de contacto. También la nacionalidad. Las competiciones se identifican por un
nombre, tienen una descripción y una o varias disciplinas. Las de hasta 20 k tienen una única disciplina: trote. En cambio
las de 42 k tienen más de una disciplina, por ejemplo natación, trote, ciclismo. Las de 50 k tienen una única disciplina al
igual que las de hasta 20 k que también es trote, pero en este caso es de interés además registrar los diferentes terrenos
por lo que transcurre la misma. Las competiciones se realizan una vez por temporada y se dan lugar en una única ciudad.
Las ciudades se identifican por su nombre, pero respecto de su país. Los países también se identifican por su nombre.
Puede haber dos ciudades con el mismo nombre en diferentes países. Se registrará la participación de los jugadores a las
competencias y en qué temporada lo hicieron, almacenado la fecha de inscripción, número de inscripción y el tiempo
que obtuvo en la carrera expresado en minutos.
Además se registrará las categorías en las que participó el jugador en cada competencia de cada temporada y la posición
que obtuvo para cada una de ellas. Las mismas se identifican por un nombre, y puede haber categorías hijas de otras
categorías. Por ejemplo la ‘categoría femenino 19 a 25’ está incluida en la categoría ‘femenino’.
Se pide: Esquema Entidad Relación

También podría gustarte