Page 1

Facultad de Ciencias Econ贸micas

Consulta SQL Sistema Informaci贸n Administrativa

Integrante: Bruno Andrade M.

Valdivia 21 de mayo 2012


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. Ayuda: Usar la fecha del sistema denominada por SYSDATE, y usar la función TRUNC para quitar las horas, minutos y segundos de las fechas. Solución: select e.rut_est, e.nombres, e.apellidos, trunc(sysdate)-p.fecha_e from estudiantes e, prestamo p where p.fecha_e < trunc(sysdate) and e.rut_est =p.rut_est 2.- Si cada día efectivo de atraso tiene un valor de $1250, entregue los mismo que en (1), pero agregando una nueva columna con la deuda adquirida por cada estudiante. Ayuda: Para multiplicar se usa el *, entonces si se desea multiplicar A por B, sería A*B. Solución: select e.rut_est, e.nombres, e.apellidos, (trunc(sysdate)-p.fecha_e)*1250 from estudiantes e, prestamo p where p.fecha_e < trunc(sysdate) and e.rut_est =p.rut_est

3.- Entregue la suma de dinero que ganará la Biblioteca acumulada al día de hoy. Ayuda: Para hacer la suma se usa la función SUM y la función GROUP BY. Solución: select sum((trunc(sysdate)-p.fecha_e)*1250) from estudiantes e, prestamo p where p.fecha_e < trunc(sysdate) and e.rut_est =p.rut_est


4.- Entregue el promedio de deuda que tienen los estudiantes al día de hoy. Ayuda: Para calcular el promedio se usa la función AVG y la función GROUP BY. Solución: select trunc(avg((trunc(sysdate)-p.fecha_e)*1250)) from estudiantes e, prestamo p where p.fecha_e < trunc(sysdate) and e.rut_est =p.rut_est

5.- Entregue la mínima deuda acumulada al día de hoy. Ayuda: Utilice la función MIN y la función GROUP BY. Solución: select min((trunc(sysdate)-p.fecha_e)*1250) from estudiantes e, prestamo p where p.fecha_e < trunc(sysdate) and e.rut_est =p.rut_est

6.- Entregue la máxima deuda acumulada al día de hoy. Ayuda: utilice la función MAX y la función GROUP BY. Solución: select max((trunc(sysdate)-p.fecha_e)*1250) from estudiantes e, prestamo p where p.fecha_e < trunc(sysdate) and e.rut_est =p.rut_est

7.- Suponiendo que ninguno de los estudiantes que se encuentran con préstamo entrega sus libros, cual será la deuda acumulada para 4 días más. Ayuda: 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 sumandos días. Para el caso de la fecha de hoy, sería SYSDATE + N. Solución: select (sum(trunc(sysdate+4)-p.fecha_e)*(1250)) from estudiantes e, prestamo p where p.fecha_e < trunc(sysdate+4) and e.rut_est =p.rut_est


8.- En su sistema de Base de Datos se encuentran 2 Vistas (Views), una llamada MAXIMO y otra llamada MINIMO. Describa claramente que entregan cada una de ellas, haciendo anรกlisis de cada parte de la consulta. Ayuda: Busque informaciรณn sobre Sub-Consultas. Soluciรณn: 1. MAXIMOS

create or replace view maximos as 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 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)) 2. MINIMOS

create or replace view minimos as 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 and (trunc(sysdate) - trunc(p.fecha_e)) = (select min(trunc(sysdate) - trunc(p2.fecha_e)) from prestamo p2 where trunc(p2.fecha_e) < trunc(sysdate))

9.- Entregue el nombre de la carrera y la cantidad de estudiantes por cada una de ellas que tiene libros atrasados. Ayuda: Use la funciรณn COUNT y la funciรณn GROUP BY.


Solución: select c.nombre, count(p.fecha_p) as cant_libros_atrasados from carreras c, estudiantes e, prestamo p where e.id_carrera = c.id_carrera and p.rut_est = e.rut_est and p.fecha_p < sysdate group by c.nombre

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. Solución: select c.nombre, count(p.cod_libro) as cant_libros_prestados from carreras c, estudiantes e, prestamo p where e.id_carrera = c.id_carrera and p.rut_est = e.rut_est group by c.nombre

11.- Investigue como entregar las 10 carreras que tienen mayor cantidad de libros en préstamo. Ayuda: Se usa un tipo de función llamada ROWNUM y la función ORDER BY. Solución: select * From prest_atrasado_carrera Where rownum < = 10 Order by num_atrasado desc;


Diagrama modelo de base de datos. Biblioteca

Consulta SQL  

Ayudantia de consulta SQL