Este documento presenta las actividades realizadas en un laboratorio sobre consultas SQL en Oracle. Contiene 11 consultas SQL con el objetivo de obtener información sobre préstamos de libros de una biblioteca universitaria, como estudiantes con préstamos atrasados, deudas acumuladas, carreras con mayor cantidad de préstamos y libros más solicitados.
1. UNIVERSIDAD AUSTRAL DE CHILE
FACULTAD DE CIENCIAS ECONÓMICAS Y ADMINISTRATIVAS
INSTITUTO DE ADMINISTRACIÓN
ADMI 273
Laboratorio N°2
Consultas 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
2. 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 dias_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, 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;
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_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.
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)
3. 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 p.fecha_e, MIN ((trunc(sysdate)-p.fecha_e)*1250) as min_deuda_dia
From prestamo p
where p.fecha_e < sysdate group by 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 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;
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 SUM((trunc(sysdate+4)-p.fecha_e)*1250) as deuda_acumulada
From 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.
4. 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.
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;
5. 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 * 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