TP6 - Ejercicio 1.4 - Grupo 3

46 views
Skip to first unread message

Lia Lucía Aguirre

unread,
May 24, 2016, 8:21:44 PM5/24/16
to gdatos
1. select e.idinventario
from ejemplar e
where e.idinventario not in (select p1.idinventario from prestamo p1);

2. select p.isbn
from categorialibro e, pedidoinsatisfecho p, categoria c
where c.categoria='Marketing' and e.isbn=p.isbn and e.idcategoria=c.idcategoria;

3. select p.dni,count(*)
from usuario u, localidad l, prestamo p
where u.idlocalidad=l.idlocalidad and l.localidad='Concordia' and
(p.fechaprestamo between '1999-01-01' and '1999-12-31') and u.dni=p.dni
group by p.dni
having count(*)>2;

4. select distinct d.departamento
from libro l, departamento d, prestamo p, investigador i, ejemplar e
where l.editorial='Sudamericana' and  i.dni=p.dni and i.categoria=d.iddepartamento and e.idinventario= p.idinventario 
and l.isbn=e.isbn;

5. select distinct l.titulo
from dicta d,cursa c, prestamo p, libro l, ejemplar e,alumno a, docente doc
where d.idmateria=c.idmateria and d.dni<>c.dni and a.dni=p.dni and p.dni=doc.dni and 
e.idinventario=p.idinventario and e.isbn=l.isbn;

6. select distinct u.nombre
from usuario u, prestamo p1, prestamo p2
where u.dni=p1.dni and u.dni=p2.dni and p1.dni=p2.dni and 
p1.fechadevolucion>p1.fechalimite and p2.fechaprestamo>p1.fechalimite;

7. SELECT DISTINCT d1.dni 
FROM dicta d1
WHERE
NOT EXISTS ( SELECT * 
FROM dicta d2
WHERE d2.idmateria = d1.idmateria AND
NOT EXISTS ( SELECT * 
FROM dicta d3
WHERE
d3.idcarrera = d2.idcarrera AND
d3.idmateria = d2.idmateria AND
d3.dni = d1.dni))
                             ORDER BY dni;

8. select e1.isbn
from ejemplar e1, ejemplar e2, prestamo p1, prestamo p2
where e1.isbn=e2.isbn and p1.idinventario=e1.idinventario and p2.idinventario=e2.idinventario
and e1.idinventario<>e2.idinventario and p1.fechaprestamo between p2.fechaprestamo and p2.fechadevolucion;

Lautaro Ramos

unread,
May 25, 2016, 6:04:42 PM5/25/16
to Grupo Gestion de Datos
Gurises,

             Les paso la revisión del ejercicio 1.4.

Saludos!

--1.
select e.idinventario
from ejemplar e
where e.idinventario not in (select p1.idinventario from prestamo p1);

--2.
select p.isbn
from categorialibro e, pedidoinsatisfecho p, categoria c
where c.categoria='Marketing' and e.isbn=p.isbn and e.idcategoria=c.idcategoria;

--3.
select p.dni,count(*)
from usuario u, localidad l, prestamo p
where u.idlocalidad=l.idlocalidad and l.localidad='Concordia' and
(p.fechaprestamo between '1999-01-01' and '1999-12-31') and u.dni=p.dni
group by p.dni
having count(*)>2;
Faltaría agregar el join con la relación Alumno, porque así como está devuelve los usuarios con 2 o más prestamos, sin importar si son alumnos o no
Además la condición del HAVING debería ser COUNT(*)>1 porque se pide los alumnos que hayan retirado al menos 2 libros
select p.dni,count(*)
from usuario u, localidad l, prestamo p, alumno a
where u.idlocalidad=l.idlocalidad and l.localidad='CONCORDIA' and
(p.fechaprestamo between '1999-01-01' and '1999-12-31') and
a.dni = p.dni and
u.dni=a.dni
group by p.dni
having count(*)>1;

--4.
select distinct d.departamento
from libro l, departamento d, prestamo p, investigador i, ejemplar e
where l.editorial='Sudamericana' and  i.dni=p.dni and i.categoria=d.iddepartamento and e.idinventario= p.idinventario 
and l.isbn=e.isbn;
La vinculación del investigador con el departamento está dada por los proyectos en los que participa, no por la categoría a la que pertenece.
Falta la vinculación entre prestamos y libro, que está dada a través del ejemplar prestado.
SELECT DISTINCT d.departamento, d.iddepartamento
FROM departamento d, proyecto p, participa par,
investigador inv, prestamo pre, ejemplar e, libro l
WHERE p.iddepartamento = d.iddepartamento
AND par.idproyecto = p.idproyecto
AND inv.dni = par.dni
AND pre.dni = inv.dni
AND e.idinventario = pre.idinventario
AND l.ISBN = e.ISBN
AND l.editorial = 'Sudamericana'

--5.
select distinct l.titulo, p.dni, a.dni
from dicta d,cursa c, prestamo p, libro l, ejemplar e,alumno a, docente doc
where d.idmateria=c.idmateria and d.dni<>c.dni and a.dni=p.dni and p.dni=doc.dni and
e.idinventario=p.idinventario and e.isbn=l.isbn;
Faltan los join entre alumno y cursa, y entre docente y dicta a.dni=p.dni and p.dni=doc.dni: con estas 2 condiciones están exigiendo que el dni del alumno sea igual al del docente, y eso no es necesario
Una solución posible puede ser:
SELECT DISTINCT
l.ISBN,
l.titulo
FROM libro l, ejemplar e, prestamo pr,
docente doc, dicta di
WHERE e.ISBN = l.ISBN
and pr.idinventario = e.idinventario
and doc.dni = pr.dni
and di.dni = doc.dni
and exists (SELECT *
FROM libro l2, ejemplar e2,
prestamo pr2, alumno a, cursa c
WHERE e2.ISBN = l2.ISBN
and pr2.idinventario = e2.idinventario
and a.dni = pr2.dni
and c.dni = a.dni
and c.idmateria = di.idmateria
and l2.ISBN = l.ISBN)


--6.
select distinct u.nombre
from usuario u, prestamo p1, prestamo p2
where u.dni=p1.dni and u.dni=p2.dni and p1.dni=p2.dni and 
p1.fechadevolucion>p1.fechalimite and p2.fechaprestamo>p1.fechalimite;


--7.
SELECT DISTINCT d1.dni 
FROM dicta d1
WHERE
NOT EXISTS ( SELECT * 
FROM dicta d2
WHERE d2.idmateria = d1.idmateria AND
NOT EXISTS ( SELECT * 
FROM dicta d3
WHERE
d3.idcarrera = d2.idcarrera AND
d3.idmateria = d2.idmateria AND
d3.dni = d1.dni))
                             ORDER BY dni;

--8.
select e1.isbn
from ejemplar e1, ejemplar e2, prestamo p1, prestamo p2
where e1.isbn=e2.isbn and p1.idinventario=e1.idinventario and p2.idinventario=e2.idinventario
and e1.idinventario<>e2.idinventario and p1.fechaprestamo between p2.fechaprestamo and p2.fechadevolucion;


 Lautaro Ramos
Ing. en Sist. de Información

--
Has recibido este mensaje porque estás suscrito al grupo "gdatos" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a gdatos+un...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages