Ejemplo creación de Base de Datos

La base de datos se llama «Biblioteca» y tiene dos tablas: «Libros» y «Prestamos».

 

La tabla «Libros» contiene información sobre los libros en la biblioteca, mientras que la tabla «Prestamos» contiene información sobre los préstamos realizados por los usuarios.

 

Estructura

 

LIBROS

 

PRESTAMOS

 

 

Creación de la Base de Datos

CREATE TABLE Libros (
IDLibro INT PRIMARY KEY,
Titulo VARCHAR(50),
Autor VARCHAR(50),
Genero VARCHAR(50),
Editorial VARCHAR(50)
);

CREATE TABLE Prestamos (
IDPrestamo INT PRIMARY KEY,
IDLibro INT,
FechaPrestamo DATE,
FechaDevolucion DATE,
Usuario VARCHAR(50),
FOREIGN KEY (IDLibro) REFERENCES Libros(IDLibro)
);

INSERT INTO Libros VALUES
(1, 'El Aleph', 'Jorge Luis Borges', 'Ficción', 'Emecé Editores'),
(2, 'Cien años de soledad', 'Gabriel García Márquez', 'Ficción', 'Sudamericana'),
(3, 'La casa de los espíritus', 'Isabel Allende', 'Ficción', 'Plaza & Janés'),
(4, 'El Quijote', 'Miguel de Cervantes', 'Ficción', 'Real Academia Española');

INSERT INTO Prestamos VALUES
(1, 1, '2022-01-01', '2022-02-01', 'Juan'),
(2, 2, '2022-02-01', '2022-03-01', 'María'),
(3, 3, '2022-03-01', '2022-04-01', 'Luis'),
(4, 4, '2022-04-01', '2022-05-01', 'Ana');

Consultas

Seleccionar todos los préstamos realizados por el usuario Juan.
SELECT * FROM Prestamos WHERE Usuario = 'Juan';

 

Mostrar los libros que están siendo prestados actualmente.

SELECT Libros.Titulo, Prestamos.FechaDevolucion 
FROM Libros 
INNER JOIN Prestamos 
ON Libros.IDLibro = Prestamos.IDLibro 
WHERE Prestamos.FechaDevolucion > CURDATE();

 

Actualizar la fecha de devolución de un préstamo específico.

UPDATE Prestamos SET FechaDevolucion = '2022-06-01' WHERE IDPrestamo = 1;

 

Borrar un libro y todos los préstamos asociados.

DELETE FROM Prestamos WHERE IDLibro = 2;
DELETE FROM Libros WHERE IDLibro = 2;

 

Seleccionar todos los préstamos realizados en un rango de fechas específico:

SELECT * FROM Prestamos 
WHERE FechaPrestamo BETWEEN '2022-02-01' AND '2022-04-01';

 

Seleccionar el número total de préstamos realizados en un rango de fechas específico.

SELECT Usuario, COUNT(*) AS NumeroPrestamos 
FROM Prestamos 
GROUP BY Usuario;

 

Seleccionar los libros que nunca han sido prestados.

SELECT Libros.Titulo, Libros.Autor 
FROM Libros 
LEFT JOIN Prestamos 
ON Libros.IDLibro = Prestamos.IDLibro 
WHERE Prestamos.IDPrestamo IS NULL;

 

Selecciona los libros que han sido prestados más veces.

SELECT Libros.Titulo, COUNT(*) AS NumeroPrestamos 
FROM Libros 
INNER JOIN Prestamos 
ON Libros.IDLibro = Prestamos.IDLibro 
GROUP BY Libros.IDLibro 
ORDER BY NumeroPrestamos DESC;

 

Selecciona los usuarios que han prestado más de 2 libros.

SELECT Usuario, COUNT(*) AS NumeroPrestamos 
FROM Prestamos 
GROUP BY Usuario 
HAVING COUNT(*) > 2;