Upload
andrea-ampuero
View
149
Download
0
Embed Size (px)
Citation preview
LABORATORIOPLSQL
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.
selecte.rut_est, e.nombres, e.apellidos,(trunc(sysdate)-(p.fecha_e))
asN_días_atrasados
from estudiantes e, prestamo p
wheree.rut_est=p.rut_est
andp.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.
selecte.rut_est, e.nombres, e.apellidos, (trunc(sysdate)-(p.fecha_e))
asN_dias_atrasados, (trunc(sysdate)-(p.fecha_e))*1250 as Deuda
from estudiantes e, prestamo p
wheree.rut_est=p.rut_estand
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.
selectsum((1250*(trunc(sysdate)-(p.fecha_e)))) asDeuda_Acumulada
fromprestamo p, estudiantes e
wheree.rut_est=p.rut_est
and (trunc(sysdate)-(p.fecha_e))> 0
groupbytrunc(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.
selectavg((1250*(trunc(sysdate)-(p.fecha_e)))) asPromedio_Deuda
fromprestamo p, estudiantes e
wheree.rut_est=p.rut_est
and (trunc(sysdate)-(p.fecha_e))> 0
groupbytrunc(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.
selectsum(dias_atraso)asMinima_deuda_acumulada
fromminimos
groupbytrunc(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.
selectsum(dias_atraso) asMaxima_deuda_acumulada
frommaximos
groupbytrunc(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.
selectsum((1250*(trunc(sysdate+4)-(p.fecha_e)))) asDeuda_Acumulada
fromprestamo p, estudiantes e
wheree.rut_est=p.rut_est
and (trunc(sysdate+4)-(p.fecha_e))> 0
groupbytrunc(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 *
frommaximos;
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 *
fromminimos;
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)asNumero_estudiantes
from estudiantes e, carreras c, prestamo p
wherec.id_carrera=e.id_carreraand
e.rut_est=p.rut_estand
p.fecha_e<trunc(sysdate)
groupby (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)asAlumnos_con_libros_prestados
from estudiantes e, carreras c, prestamo p
wherec.id_carrera=e.id_carreraand
e.rut_est=p.rut_est
groupby (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.
createorreplaceview L10V as
select nombre, count(e.rut_est)asAlumnos_con_libros_prestados
from estudiantes e, carreras c, prestamo p
wherec.id_carrera=e.id_carreraand
e.rut_est=p.rut_est
groupby (nombre);
select nombre, alumnos_con_libros_prestados
from L10v
whererownum<11
orderbyalumnos_con_libros_prestadosdesc;