Tarea 2

5
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.

Transcript of Tarea 2

Page 1: 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.

Page 2: Tarea 2

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)

Page 3: Tarea 2

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)

Page 4: Tarea 2

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

Page 5: Tarea 2

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