laboratorio plsql

7
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

Upload: elizabeth-morales

Post on 09-Mar-2016

219 views

Category:

Documents


2 download

DESCRIPTION

Tarea de ayudantía 14.05.2012

TRANSCRIPT

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;