Tarea 2
-
Upload
carlos-mancilla -
Category
Documents
-
view
268 -
download
1
Transcript of Tarea 2
Ayudantia de SQL: sub-consultas
Integrantes: Carlos Mancilla I.
Asignatura: Sistema de Información Empresarial
Profesor Responsable: Cristian Salazar
Valdivia, 17 de Mayo de 2012.
Universidad Austral de Chile.
Facultad Ciencias Económicas y Administrativas.
Escuela de Ingeniería Comercial.
Carlos Andrés Mancilla Ibaca - Ing. Comercial
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 p.rut_est, e.nombres, e.apellidos, l.titulo, (trunc(sysdate) - trunc(p.fecha_e)) as
ATRASO
from prestamo p, estudiantes e, libros l
where p.rut_est = e.rut_est
and p.cod_libro = l.cod_libro
and trunc(sysdate) > trunc(p.fecha_e)
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 p.rut_est, e.nombres, e.apellidos, l.titulo, (trunc(sysdate) - trunc(p.fecha_e)) as
ATRASO, (trunc(sysdate) - trunc(p.fecha_e))*1250 as DEUDA
from prestamo p, estudiantes e, libros l
where p.rut_est = e.rut_est
and p.cod_libro = l.cod_libro
and trunc(sysdate) > trunc(p.fecha_e)
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 INGRESO_BIBLIO
from prestamo p, estudiantes e, libros l
where p.rut_est = e.rut_est
and p.cod_libro = l.cod_libro
and trunc(sysdate) > trunc(p.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 ROUND(AVG ((trunc(sysdate) - trunc(p.fecha_e))*1250)) AS PROM_DEUDA
from prestamo p, estudiantes e, libros l
where p.rut_est = e.rut_est
and p.cod_libro = l.cod_libro
and trunc(sysdate) > trunc(p.fecha_e)
Carlos Andrés Mancilla Ibaca - Ing. Comercial
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 MIN ((trunc(sysdate) - trunc(p.fecha_e))*1250) AS MIN_DEUDA
from prestamo p, estudiantes e, libros l
where p.rut_est = e.rut_est
and p.cod_libro = l.cod_libro
and trunc(sysdate) > trunc(p.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 MAX ((trunc(sysdate) - trunc(p.fecha_e))*1250) AS MIN_DEUDA
from prestamo p, estudiantes e, libros l
where p.rut_est = e.rut_est
and p.cod_libro = l.cod_libro
and trunc(sysdate) > trunc(p.fecha_e)
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((trunc(sysdate+4) - trunc(p.fecha_e))*1250) AS DEUDA_4_DIAS
from prestamo p, estudiantes e, libros l
where p.rut_est = e.rut_est
and p.cod_libro = l.cod_libro
and trunc(sysdate+4) > trunc(p.fecha_e)
Carlos Andrés Mancilla Ibaca - Ing. Comercial
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 nos entrega el rut por separado, nombre y apellidos unidos en una sola
celda del alumno con mas días de atraso y el monto máximo a pagar en relación a todos los
atrasos que se encuentran el base de datos, además de indicar el libro involucrado en el préstamo,
esto lo hace a través de una sub consulta que podemos ver en las ultimas líneas de la consulta
cuando se abre un paréntesis, en este momento se genera una tabla sobre la que trabaja la
función general, en esta nueva tabla se da la condición del máximo. Para la consulta siguiente en la
cual se generan los mínimos pagos vemos la sub-consulta en el mismo lugar en las filas de la
programación de la vista y los mismos atributos al comienzo como el integrar nombre y apellido de
los estudiantes.
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 COUNT(e.rut_est), c.nombre
from prestamo p, estudiantes e, carreras c
where p.rut_est = e.rut_est
AND e.id_carrera = c.id_carrera
and trunc(sysdate) > trunc(p.fecha_e)
group by c.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 COUNT(e.rut_est), c.nombre
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
Carlos Andrés Mancilla Ibaca - Ing. Comercial
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), c.nombre
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