1. Universidad Austral de Chile
Facultad de Ciencias Económicas y Administrativas
Ingeniería Comercial
Sistema de Información Empresarial
Guía de laboratorio N° 2
PLSQL Developer
Asignatura:
Sistema de información empresarial
Profesor:
Cristian Salazar
Profesor Ayudante:
José Luis Carrasco
Estudiante:
Mónica Navarrete
Mayo 2012 - VALDIVIA
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. 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.
select e.rut_est, e.nombres, e.apellidos, p.fecha_e,trunc(sysdate - p.fecha_e) as atraso
from estudiantes e, prestamo p
where p.fecha_e < 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.
select e.rut_est, e.nombres, e.apellidos, p.fecha_e,trunc(sysdate - p.fecha_e) as atraso,
trunc(sysdate - p.fecha_e)*1250 as deuda
from estudiantes e, prestamo p
where p.fecha_e < sysdate
and e.rut_est = p.rut_est
3. 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.
select sum((trunc(sysdate) - trunc(p.fecha_e))*1250) as deuda_total
from prestamo p
where trunc(sysdate) > trunc(p.fecha_e)
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.
select avg((trunc(sysdate) - trunc(p.fecha_e))*1250) as promedio_deuda
from prestamo p
where trunc(sysdate) > trunc(p.fecha_e)
5.- Entregue la mínima deuda acumulada al día de hoy. Ayuda: Utilice la función MIN y la función
GROUP BY.
select min((trunc(sysdate)-trunc(p.fecha_e))*1250) as minima_deuda
from prestamo p
where trunc(sysdate) > trunc(p.fecha_e)
6.- Entregue la máxima deuda acumulada al día de hoy. Ayuda: utilice la función MAX y la función
GROUP BY.
select max((trunc(sysdate)-trunc(p.fecha_e))*1250) as minima_deuda
from prestamo p
where trunc(sysdate) > trunc(p.fecha_e)
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.
select sum((trunc(sysdate + 4) - trunc(p.fecha_e))*1250) as deuda_total_cuatro_dias
from prestamo p
where trunc(sysdate + 4) > trunc(p.fecha_e)
4. 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.
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));
Esta tabla muestra los estudiantes que tienen una mínima deuda, utilizando una sub-consulta que
le entrega los días mínimos en la base de datos de los textos atrasados, esta consulta en el último
and corresponde a otra consulta anterior.
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));
Esta tabla entrega a los estudiantes que poseen la máxima deuda por sus días de atraso, utiliza
una sub-consulta que entrega el máximo números de días de atraso, la consulta que está en el
último and, corresponde a una consulta anteriormente hecha a la base de datos.
5. 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.
select c.nombre as carrera, count(p.rut_est) as n_alumnos_pres_atarsados
from carreras c, prestamo p, estudiantes e
where p.rut_est = e.rut_est
and e.id_carrera = c.id_carrera
and trunc(p.fecha_e) < trunc(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.
select c.nombre as carrera, count(p.rut_est) as n_est_un_prest
from carreras c, prestamo p, estudiantes e
where p.rut_est = e.rut_est
and e.id_carrera = c.id_carrera
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.
select "CARRERA","NUMERO_PRESTAMOS_VIGENTES"
from (select c.nombre as carrera, count(p.rut_est) as numero_prestamos_vigentes
from carreras c, prestamo p, estudiantes e
where p.rut_est = e.rut_est
and e.id_carrera = c.id_carrera
group by c.nombre
6. order by numero_prestamos_vigentes desc)
where rownum <= 10
Bibliografía:
http://www.desarrolloweb.com/articulos/2337.php
http://www.epidataconsulting.com/tikiwiki/tiki-read_article.php?articleId=63