You are on page 1of 4

CREATE DATABASE biblioteca1;

use biblioteca1;

CREATE TABLE usuarios


(
id_usuario SMALLINT UNSIGNED AUTO_INCREMENT,
numero_carnet INT UNSIGNED NOT NULL,
dni VARCHAR(14) NOT NULL,
nombre VARCHAR(20) NOT NULL,
apellido VARCHAR(20) NOT NULL,
CONSTRAINT pk_id_usuario PRIMARY KEY (id_usuario),
CONSTRAINT unq_numero_carnet UNIQUE (numero_carnet),
CONSTRAINT unq_dni_usuario UNIQUE (dni)
);

CREATE TABLE nacionalidades


(
id_nacionalidad SMALLINT UNSIGNED AUTO_INCREMENT,
nombre_pais VARCHAR(20) NOT NULL,
CONSTRAINT pk_id_nacionalida PRIMARY KEY (id_nacionalidad),
CONSTRAINT unq_nombre_pais UNIQUE (nombre_pais)
);

INSERT INTO nacionalidades (nombre_pais) VALUES


('Argentina'),
('Brasil'),
('Paraguay'),
('Espana');

CREATE TABLE editores


(
id_editor SMALLINT UNSIGNED AUTO_INCREMENT,
nombre_editorial VARCHAR(20) NOT NULL,
direccion VARCHAR(30),
CONSTRAINT pk_id_editores PRIMARY KEY (id_editor)
);

INSERT INTO editores (nombre_editorial,direccion) VALUES


('Alfaguara','calle falsa 123'),
('Oxford','Direccion223'),
('Editorial Alpha','dir 12323'),
('Oxford beta','dir 21332');

CREATE TABLE estanterias


(
id_estanteria SMALLINT UNSIGNED AUTO_INCREMENT,
numero INT UNSIGNED NOT NULL,
sector VARCHAR(20) NOT NULL,
CONSTRAINT pk_id_estanteri PRIMARY KEY (id_estanteria),
CONSTRAINT unq_numero_sector UNIQUE (numero,sector)
);

INSERT INTO estanterias (numero,sector) VALUES


(1,'A'),
(2,'B'),
(3,'C'),
(4,'D');
CREATE TABLE temas
(
id_tema SMALLINT UNSIGNED AUTO_INCREMENT,
nombre VARCHAR(20),
CONSTRAINT pk_id_tema PRIMARY KEY (id_tema),
CONSTRAINT unq_nombre UNIQUE (nombre)
);

INSERT INTO temas (nombre) VALUES


('Filosofia'),
('Matematica'),
('Programacion IV'),
('Aprende Mongo DB'),
('Php Pdo Avanzado');

CREATE TABLE autores


(
id_autor SMALLINT UNSIGNED AUTO_INCREMENT,
id_nacionalidad SMALLINT UNSIGNED,
nombre VARCHAR(20) NOT NULL,
apellido VARCHAR(20) NOT NULL,
CONSTRAINT pk_id_autor PRIMARY KEY (id_autor),
CONSTRAINT fk_id_nacionalidad_autores FOREIGN KEY (id_nacionalidad) REFERENCES
nacionalidades (id_nacionalidad)
);

INSERT INTO autores (id_nacionalidad, nombre, apellido) values


(1,'Jorge', 'Perez'),
(3,'Pepe','Gonzales'),
(1,'Nicolas','Sanchez'),
(2,'Pablo','Perez');

CREATE TABLE libros


(
id_libro SMALLINT UNSIGNED AUTO_INCREMENT,
id_estanteria SMALLINT UNSIGNED,
id_editor SMALLINT UNSIGNED,
isbn INT UNSIGNED NOT NULL,
titulo VARCHAR(30) NOT NULL,
CONSTRAINT pk_id_libro PRIMARY KEY (id_libro),
CONSTRAINT fk_id_estanterias_libros FOREIGN KEY (id_estanteria) REFERENCES
estanterias (id_estanteria),
CONSTRAINT fk_id_id_editores_libros FOREIGN KEY (id_editor ) REFERENCES editores
(id_editor )
);

INSERT INTO libros (id_estanteria,id_editor,isbn,titulo) VALUES


("3","4",50,"SIN LIMITES"),
("2","3",51,"SIN LIMITES HISTORIA"),
("1","3",100,"LOS PIRATAS"),
("3","1",180,"DAMA DE NEGRO");

CREATE TABLE temas_x_libros


(
id_libro SMALLINT UNSIGNED AUTO_INCREMENT,
id_tema SMALLINT UNSIGNED,
CONSTRAINT pk_id_temas_x_libro_libros FOREIGN KEY (id_libro) REFERENCES libros
(id_libro),
CONSTRAINT fk_id_temas_temas_x_temas FOREIGN KEY (id_tema) REFERENCES temas
(id_tema)
);

CREATE TABLE autores_x_libros


(
id_libro SMALLINT UNSIGNED,
id_autor SMALLINT UNSIGNED,
CONSTRAINT fk_id_autores_x_libros_libros FOREIGN KEY (id_libro) REFERENCES libros
(id_libro),
CONSTRAINT fk_id_autores_x_libros_autores FOREIGN KEY (id_autor) REFERENCES autores
(id_autor)
);

CREATE TABLE prestamos


(
id_prestamo SMALLINT UNSIGNED AUTO_INCREMENT,
id_libro SMALLINT UNSIGNED,
id_usuario SMALLINT UNSIGNED,
fecha_retiro DATETIME NOT NULL,
fecha_devolucion DATETIME NOT NULL,
CONSTRAINT pk_id_prestamos PRIMARY KEY (id_prestamo),
CONSTRAINT fk_id_prestamos_libros FOREIGN KEY (id_libro) REFERENCES libros
(id_libro),
CONSTRAINT fk_id_prestamos_usuarios FOREIGN KEY (id_usuario) REFERENCES usuarios
(id_usuario)
);

/*querys*/

SELECT a.nombre,a.apellido, n.nombre_pais nacionalidad


FROM autores a INNER JOIN nacionalidades n
WHERE n.nombre_pais='Espana';

SELECT l.titulo,l.isbn
FROM libros l
WHERE l.isbn > '50' AND l.isbn < '200';

/* Listar los Autores en orden alfabético inverso (Z - A).*/

select * from autores


order by apellido desc , nombre desc;

/*2.3 ordena de forma desendente*/


SELECT l.titulo,l.isbn
FROM libros l
WHERE l.isbn > '50' AND l.isbn < '200' ORDER BY isbn DESC;
/*Asecendente remplazo el DESC por el ASC*/

/*Punto 3
Titulo
Tema
Nombre del Autor
*/
SELECT
lib.titulo,tem.nombre,
CONCAT(a.nombre,'',a.apellido) as nombre_apellido
FROM libros lib
INNER JOIN temas_x_libros txl ON lib.id_libro = txl.id_libro
INNER JOIN temas tem ON txl.id_tema = tem.id_tema
INNER JOIN autores_x_libros axl ON lib.id_libro = axl.id_libro
INNER JOIN autores a ON axl.id_autor = a.id_autor;

/*4•Consultar la cantidad de Libros de la estantería 3.*/


SELECT COUNT(*) cantidad FROM libros l WHERE l.id_estanteria=3;

/*5 Mostrar el Libro con el ISBN más alto.*/


select titulo, isbn from libros order by isbn desc limit 1;
/*opcion 2 (nofunciona)*/
SELECT l.titulo,MAX(l.isbn) FROM libros l;
/*opcion 3(no funciona)*/
select lib.titulo,lib.isbn
from libros lib
where lib.isbn = (select max(lib.isbn) from libros) limit 1;
/*opcion 4*/

/*Carnet 123*/
select *
from usuarios usr
where usr.nombre = 'Zahir';

/*• Generar la consulta para ver el siguiente Resultado:


nombre,isbn,titulo,tema*/
SELECT e.nombre_editorial,l.isbn,l.titulo,t.nombre temas FROM editores e
INNER JOIN libros l ON l.id_editor = e.id_editor
INNER JOIN temas_x_libros tl ON tl.id_libro =l.id_libro
INNER JOIN temas t ON t.id_tema = tl.id_tema;

/*Cantidad de autores por nacionalidad*/


select count(*) from
autores a inner join nacionalidades n on a.id_nacionalidad = n.id_nacionalidad
group by n.nombre_pais;

/*Consultar la cantidad de retiros de cada usuario (no funcione)*/


select p.fecha_retiro from prestamos p
inner join usuarios on p.id_usuario = p.id_usuario
group by p.id_usuario desc;
/*opcion 2*/
SELECT p.fecha_retiro,u.nombre, u.apellido FROM prestamos p
INNER JOIN usuarios u ON u.id_usuario = p.id_usuario
ORDER BY p.fecha_retiro DESC;

/*sacar promedio de libros por dia*/


SELECT AVG(p.fecha_retiro / p.id_prestamo) FROM prestamos p;

You might also like