UNIVERSIDAD AUSTRAL DE CHILEFACULTAD DE CIENCIAS ECONÓMICAS Y ADMINISTRATIVAS
INSTITUTO DE ADMINISTRACIÓNADMI 273
Laboratorio N°2Consultas PL/SQL-
Oracle
Nombre: Elmar Alarcón Namuncura
Asignatura: Sistemas de Información Empresarial
Profesor Asignatura: Cristian Salazar C. – José Luis Carrasco V.
Valdivia, 21 de Mayo de 2012
A continuación se presenta el desarrollo del laboratorio N°2 de la ayudantía del día 14
de mayo.
Actividades
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.
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.
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 e.rut_est, e.nombres, e.apellidos, trunc(sysdate)-p.fecha_e as dias_atraso From estudiantes e, prestamo p where p.fecha_e < sysdate and e.rut_est = p.rut_est;
select e.rut_est, e.nombres, e.apellidos, trunc(sysdate)-p.fecha_e as dias_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;
select sum((trunc(sysdate) - trunc(p.fecha_e))*1250) as Deuda_Total_Atrasos from prestamo p where trunc(sysdate) > trunc(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.
5. Entregue la mínima deuda acumulada al día de hoy. Ayuda: Utilice la función
MIN y la función GROUP BY.
6. Entregue la máxima deuda acumulada al día de hoy. Ayuda: utilice la función
MAX y la función GROUP BY.
7. Suponiendo que ninguno de los estudiantes que se encuentran con préstamo entrega
sus libros, cuál 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 trunc(avg((trunc(sysdate) - trunc(p.fecha_e))*1250)) as Deuda_Promedio_Atrasos, count(trunc(sysdate) - trunc(p.fecha_e)) as alumnos_atrasados from prestamo p where trunc(sysdate) > trunc(fecha_e)
select p.fecha_e, MIN ((trunc(sysdate)-p.fecha_e)*1250) as min_deuda_dia From prestamo pwhere p.fecha_e < sysdate group by fecha_e;
select p.fecha_e, MAX ((trunc(sysdate)-p.fecha_e)*1250) as max_deuda_dia From prestamo p where p.fecha_e < sysdate group by fecha_e;
select SUM((trunc(sysdate+4)-p.fecha_e)*1250) as deuda_acumuladaFrom prestamo p where p.fecha_e < sysdate;
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.
La vista máximos guardada en el sistema de base de datos nos muestra el Rut y
nombre del estudiante, además muestra el título del libro prestado y la deuda que
tiene el estudiante hasta el momento, además del estudiante que más deuda tiene.
La vista mínimos nos muestra también el nombre y el nombre del estudiante,
además del título del libro prestado y la deuda que tiene el estudiante hasta el
momento. Los 4 estudiantes que aparecen de la vista son los que tienen la menor
deuda.
En cuanto al tema de las subconsultas, se encontró lo siguiente: “una subconsulta es
una instrucción SELECT anidada dentro de otra instrucción SELECT: SELECT
INTO, INSERT, INTO, DELETE, o UPDATE o dentro de otra subconsulta. Los
formatos para las instrucciones de subconsultas son las siguientes:
- WHERE expression [NOT] IN (subconsulta)
- WHERE expression operador_comparacion [ANY | ALL] (subconsulta)
- WHERE [NOT] EXISTS (subconsulta )
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, count((trunc(sysdate)-p.fecha_e)) as num_atrasado from carreras c, prestamo p, estudiantes e where p.rut_est = e.rut_est and c.id_carrera = e.id_carrera group by c.nombre;
10. Lo 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.
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 l.cod_libro, count(p.rut_est) as cant_est from libros l, prestamo p where l.cod_libro = p.cod_libro group by l.cod_libro;
select * from ( select COUNT(e.rut_est) as Libros_Prestados, c.nombre as Carrera from prestamo p, estudiantes e, carreras c where p.rut_est = e.rut_est and e.id_carrera = c.id_carrera group by c.nombre order by COUNT(e.rut_est) desc) where rownum <=10