laboratorio plsql
DESCRIPTION
Tarea de ayudantía 14.05.2012TRANSCRIPT
LABORATORIO PLSQL
14.05.2012
Integrantes: Elizabeth Morales
Febe Moena
Andrea Uribe
Profesor: Cristian Salazar
Ayudante: José Luis Carrasco
Curso: ADMI 273
Valdivia 21 de Mayo, 2012
1
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,(trunc(sysdate)-(p.fecha_e)) as
N_días_atrasados
from estudiantes e, prestamo p
where e.rut_est=p.rut_est
and p.fecha_e<trunc(sysdate);
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, (trunc(sysdate)-(p.fecha_e)) as
N_dias_atrasados, (trunc(sysdate)-(p.fecha_e))*1250 as Deuda
from estudiantes e, prestamo p
where e.rut_est=p.rut_est and
p.fecha_e<trunc(sysdate);
2
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((1250*(trunc(sysdate)-(p.fecha_e)))) as Deuda_Acumulada
from prestamo p, estudiantes e
where e.rut_est=p.rut_est
and (trunc(sysdate)-(p.fecha_e))> 0
group by trunc(sysdate);
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((1250*(trunc(sysdate)-(p.fecha_e)))) as Promedio_Deuda
from prestamo p, estudiantes e
where e.rut_est=p.rut_est
and (trunc(sysdate)-(p.fecha_e))> 0
group by trunc(sysdate);
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 sum(dias_atraso)as Minima_deuda_acumulada
from minimos
group by trunc(sysdate);
3
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 sum(dias_atraso) as Maxima_deuda_acumulada
from maximos
group by trunc(sysdate);
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((1250*(trunc(sysdate+4)-(p.fecha_e)))) as Deuda_Acumulada
from prestamo p, estudiantes e
where e.rut_est=p.rut_est
and (trunc(sysdate+4)-(p.fecha_e))> 0
group by trunc(sysdate);
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.
select *
from maximos;
Esta función muestra los estudiantes que tienen la mayor deuda acumulada, es decir los que
llevan más días de atraso en entregar los libros. Lo que va haciendo es algoritmo es buscar
todos los estudiantes que tienen deuda y buscar el o los que tengan la máxima deuda, es
este caso es sólo uno y hasta el día de hoy (17/05/2012) debe $20.000.
select *
from minimos;
Esta función muestra los estudiantes que tienen la menor deuda acumulada en pesos y el
libro que tienen atrasado. Al contrario de la función máximo, lo que va haciendo este
algoritmo es buscar los estudiantes que tienen deuda, buscando los que tengan la deuda mas
baja, en este caso son varios los que tienen la mínima deuda.
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 nombre, count(e.rut_est)as Numero_estudiantes
from estudiantes e, carreras c, prestamo p
where c.id_carrera=e.id_carrera and
e.rut_est=p.rut_est and
p.fecha_e<trunc(sysdate)
group by (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 nombre, count(e.rut_est)as Alumnos_con_libros_prestados
from estudiantes e, carreras c, prestamo p
where c.id_carrera=e.id_carrera and
e.rut_est=p.rut_est
group by (nombre);
6
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.
create or replace view L10V as
select nombre, count(e.rut_est)as Alumnos_con_libros_prestados
from estudiantes e, carreras c, prestamo p
where c.id_carrera=e.id_carrera and
e.rut_est=p.rut_est
group by (nombre);
select nombre, alumnos_con_libros_prestados
from L10v
where rownum<11
order by alumnos_con_libros_prestados desc;