Ejemplos sql resueltos
-----------------------------------------------------------------------------------------
INTEGRANTES
-----------------------------------------------------------------------------------------
Tablas del modelo de datos ibd_tp2_v3
autores (idAutores, nombre, apellido, f_nacimiento, email, web)
bibliotecas(idBibliotecas, nombre,f_inaguracion, web, calle, nro, dpto, piso, cp)
biblio_socios(idBiblioSocios, idSocios, idBibliotecas)
editoriales(idEditoriales, denominacion, email, web, pais, ciudad, calle, nro, piso, dpto, cp, vigente)
ejemplares(idEjemplares, NIU, idLibros, idBibliotecas, estado)
libros(idLibros, ISBN, titulo, anio_de_edicion, idEditoriales)
libros_autores(idLibrosAutores, idAutores, idLibros)prestamos(idPrestamos, fec_prestamo, idSocios, idEjemplares, idBibliotecas, fec_devolucion, fec_efec_devolucion)
reservas(idReservas, fec_reserva, idBibliotecas, idSocios, idLibros, fec_fin_reserva, efectiva)
sanciones(idSanciones, fec_inicio, idBibliotecas, idSocios, fec_fin, motivo)
socios(idSocios, dni, nombre, apellido, f_nacimiento, calle, nro, piso, dpto, cp, email, estudiante)tel_bibliotecas(idTel_bibliotecas, numero, idBibliotecas)
tel_editoriales(idTel_editoriales, numero, idEditoriales)
tel_socios(idTelSocios, numero, idSocios)
a) Para una biblioteca dada, listar el ISBN y título de todos los libros que tengan
alguna copia en estado malo, junto con la cantidad de copias en ese estado para el
libro.
SELECT b.idBibliotecas, l.isbn, l.titulo,count(l.idLibros) as en_mal_estado
FROM bibliotecas b INNER JOIN ejemplares e ON (b.idBibliotecas = e.idBibliotecas)
INNER JOIN libros l ON (e.idLibros = l.idLibros)
WHERE (e.estado = 'malo')
GROUP BY l.idLibros
b) Listar las bibliotecas (código y nombre) en las que existe al menos un ejemplar de
un libro cuyo ISBN se conoce.
SELECT distinct b.idBibliotecas,b.nombre
FROM bibliotecas b INNER JOIN ejemplares e ON (b.idBibliotecas = e.idBibliotecas)
INNER JOIN libros l ON (e.idLibros = l.idLibros)
WHERE (l.isbn = '950-742-894-X')
c.) Listar los libros (isbn, título y año de edición) existentes en una biblioteca dada
ordenados por su título.
SELECT distinct l.isbn, l.titulo, l.anio_de_edicion, b.idBibliotecas
FROMbibliotecas b INNER JOIN ejemplares e ON (b.idBibliotecas = e.idBibliotecas)
INNER JOIN libros l ON (e.idLibros = l.idLibros)
ORDER BY 2
d) Listar todas las sanciones que haya tenido un socio en cualquier biblioteca,
ordenadas cronológicamente. Se debe consignar el nombre de la biblioteca, el
motivo de la sanción y las fechas de inicio y fin de la misma.
SELECTsoc.idSocios, soc.nombre, soc.apellido, b.nombre, s.motivo, s.fec_inicio, s.fec_fin
FROM bibliotecas b INNER JOIN sanciones s ON (b.idBibliotecas = s.idBibliotecas)
INNER JOIN socios soc ON (s.idSocios = soc.idSocios)
ORDER BY s.fec_inicio
e) Listar todos los isbn de libros que están prestados actualmente y todos los libr
que están reservados actualmente, en una biblioteca dada, conun campo
“Asignación” con valor “P” si está prestado y valor “R” si está reservado.
SELECT b.idBibliotecas, l.*, 'P' as Asiganación
FROM bibliotecas b INNER JOIN prestamos p ON (b.idBibliotecas = p.idBibliotecas)
INNER JOIN ejemplares e ON (p.idEjemplares = e.idEjemplares)
INNER JOIN libros l ON (e.idLibros = l.idLibros)
WHERE (p.fec_efec_devolucion IS NULL)UNION ALL
SELECT b.idBibliotecas, l.*, 'R' as Asiganación
FROM bibliotecas b INNER JOIN reservas r ON (b.idBibliotecas = r.idBibliotecas)
INNER JOIN libros l ON (r.idLibros = l.idLibros)
WHERE (r.fec_fin_reserva > CURDATE())
ORDER BY 1
g) Listar todos los autores que hayan escrito libros de una editorial dada.
SELECT a.idAutores, a.nombre, a.apellido, l.titulo...
Regístrate para leer el documento completo.