Tarea ayudantia nº2

8
TRABAJO N°2 AYUDANTÍA BÚSQUEDAS PLSQL Profesor: Cristian Salazar Ayudante : José Luis Carrasco Alumno: Alejandro Universidad Austral de Chile Facultad de Ciencias Económicas y Administrativas Escuela de Ingeniería Comercial Sistemas de información empresarial

Transcript of Tarea ayudantia nº2

Page 1: Tarea ayudantia nº2

TRABAJO N°2 AYUDANTÍABÚSQUEDAS PLSQL

Profesor: Cristian SalazarAyudante: José Luis CarrascoAlumno: Alejandro Ramírez

Universidad Austral de ChileFacultad de Ciencias Económicas y Administrativas

Escuela de Ingeniería ComercialSistemas de información empresarial

VALDIVIA, MAYO 2012

Page 2: Tarea ayudantia nº2

ACTIVIDADES

Supuestos: La base de datos no guarda el histórico de los préstamos realizados, es decir, que al entregar un libro, ese préstamo se elimina de la tabla PRESTAMO.

1.-Se solicita realizar una consulta que entregue a los estudiantes atrasados en la entrega de sus préstamos de libros, e indicar la cantidad de días de atraso para cada préstamo. Los campos a mostrar son: Rut del estudiante, Nombres, Apellidos y el N° de días de atraso. A yu da : Usarla fecha del sistema denominada por SYSDATE, y usar la función TRUNC para quitar las horas, minutos y segundos de las fechas.

2.-Si cada día efectivo de atraso tiene un valor de $1250, entregue lo mismo que en (1), pero agregando una nueva columna con la deuda adquirida por cada estudiante.

Select e.nombres NOMBRE_EST, e.apellidos APELLIDOS_EST, trunc(sysdate)-p.fecha_e DIAS_DE_ATRASOfrom estudiantes e, prestamo pwhere e.rut_est=p.rut_estand p.fecha_e<sysdate;

Select e.nombres NOMBRE_EST, e.apellidos APELLIDOS_EST, trunc(sysdate)-p.fecha_e DIAS_DE_ATRASO, (trunc(sysdate)-p.fecha_e)*1250 DEUDAfrom estudiantes e, prestamo pwhere e.rut_est=p.rut_estand p.fecha_e<sysdate;

Page 3: Tarea ayudantia nº2

3.-Entregue la suma de dinero que ganará la Biblioteca acumulada al día de hoy. Ay u da : Para hacer la suma se usa la función SUM y la función GROUP BY.

4.- Entregue el promedio de deuda que tienen los estudiantes al día de hoy. A y u da : Para calcular el promedio se usa la función AVG y la función GROUP BY.

5.- Entregue la mínima deuda acumulada al día de hoy. Ay u da : Utilice la función MIN y la función GROUP BY.

Select sum((trunc(sysdate)-p.fecha_e)*1250) DEUDA_TOTAL from estudiantes e, prestamo pwhere e.rut_est=p.rut_estand p.fecha_e<sysdate;

Select avg((trunc(sysdate)-p.fecha_e)*1250) DEUDA_PROMEDIO from estudiantes e, prestamo pwhere e.rut_est=p.rut_estand p.fecha_e<sysdate;

Select MIN((trunc(sysdate)-p.fecha_e)*1250) DEUDA_MINIMA from estudiantes e, prestamo pwhere e.rut_est=p.rut_estand p.fecha_e<sysdate;

Page 4: Tarea ayudantia nº2

6.- Entregue la máxima deuda acumulada al día de hoy. Ay u da : utilice la función MAX y la función GROUP BY.

7.- Suponiendo que ninguno de los estudiantes que se encuentran con préstamo entrega sus libros, cuál será la deuda acumulada para 4días más. A yu da : Para sumar un días a una fecha se hace de la siguiente forma: FECHA +N, donde N es la cantidad de días a sumar y FECHA es la fecha a la cual le estamos sumando días. Para el caso de la fecha de hoy, sería SYSDATE+ N.

8.- En su sistema de Base de Datos se encuentran 2 Vistas (Views),una llamada MAXIMO llamada MINIMO. Describa claramente que entregan cada una de ellas, haciendo análisis de cada parte de la consulta. A y ud a : Busque información sobre Sub-Consultas.

Las consultas nos entregan los resultados de la mayor y la menor deuda de los estudiantes, provenientes de la cantidad de días que deben el libro que aparece claramente especificado.

En la vista máximos, es posible ver el nombre del estudiante, en conjunto con su rut y el nombre del libro, que posee la mayor deuda.

En la vista mínimos es posible ver los nombres de los estudiantes, en conjunto con sus rut y nombres de los libros, que poseen las menores deudas.

Select MAX((trunc(sysdate)-p.fecha_e)*1250) DEUDA_MAXIMA from estudiantes e, prestamo pwhere e.rut_est=p.rut_estand p.fecha_e<sysdate;

Select SUM((trunc(sysdate)-p.fecha_e)+4)*1250 DEUDA_TOTAL_A_4_DIAS from estudiantes e, prestamo pwhere e.rut_est=p.rut_estand p.fecha_e<sysdate;

Page 5: Tarea ayudantia nº2

Análisis de las partes de las consultas

a) En la primera parte (todo lo que considera el SELECT), se requiere que se muestre el rut de los estudiantes como RUT, los apellidos en conjunto con el nombre de los estudiantes como NOMBRE, el título del libro y la multa total como DIAS_ATRASO, que involucra la cantidad de días de atrasos multiplicado por 1250.

b) En la segunda parte (todo lo que considera en FROM), se identifica la tabla préstamo con la letra “p”, la tabla estudiantes con la letra “e”, y la tabla libros con la letra “l”.

c) En esta tercera parte (WHERE), se pide como condición que la fecha de entrega sea menor que la fecha del sistema.

d) En la cuarta parte (AND’s) se solicita que se igualen las primary keys de las tablas utilizadas.

select p.rut_est RUT, e.apellidos || ' ' || e.nombres NOMBRE, l.titulo, (trunc(sysdate) - trunc(p.fecha_e)) * 1250 as DIAS_ATRASO

from prestamo p, estudiantes e, libros l

where trunc(p.fecha_e) < trunc(sysdate)

and p.rut_est = e.rut_est and p.cod_libro = l.cod_libro

Page 6: Tarea ayudantia nº2

e) En la quinta y última parte, se realiza una subconsulta (una subconsulta consiste aplicar una instrucción SELECT dentro de otra función SELECT), que solicita que la función de días de atraso del préstamo en cuestión dé como resultado el mayor número de días. (en el caso del mínimo, se solicita lo contrario).

9.-Entregue el nombre de la carrera y la cantidad de estudiantes por cada una de ellas que tiene libros atrasados. Ay ud a : Use la función COUNT y la función GROUP BY.

10.- Los mismo que en (9) pero esta vez que entregue la cantidad de estudiantes que tiene un libro en préstamo ya sea atrasado o al día.

and (trunc(sysdate) - trunc(p.fecha_e)) = (select max(trunc(sysdate) - trunc(p2.fecha_e)) from prestamo p2 where trunc(p2.fecha_e) < trunc(sysdate));

SELECT c.nombre CARRERA, count(e.rut_est) NUMERO_ATRASOSFROM estudiantes e, prestamo p, carreras cWHERE e.rut_est = p.rut_estand c.id_carrera = e.id_carreraand fecha_e<sysdateGROUP by c.nombre;

SELECT c.nombre CARRERA, count(e.rut_est) NUMERO_ATRASOSFROM estudiantes e, prestamo p, carreras cWHERE e.rut_est = p.rut_estand c.id_carrera = e.id_carreraGROUP by c.nombre;

Page 7: Tarea ayudantia nº2

11.-Investigue como entregar las 10 carreras que tienen mayor cantidad de libros en préstamo. Ay u da : Se usa un tipo de función llamada ROW NUM y la función ORDER BY.

SELECT c.nombre CARRERA, count(e.rut_est) NUMERO_ATRASOSFROM estudiantes e, prestamo p, carreras cWHERE e.rut_est = p.rut_estand c.id_carrera = e.id_carreraGROUP by c.nombre;