-
Notifications
You must be signed in to change notification settings - Fork 124
/
sentencias.sql
217 lines (175 loc) · 6.98 KB
/
sentencias.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
DROP DATABASE IF EXISTS libreria_cf;
CREATE DATABASE IF NOT EXISTS libreria_cf;
USE libreria_cf;
CREATE TABLE IF NOT EXISTS autores(
autor_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(25) NOT NULL,
apellido VARCHAR(25) NOT NULL,
seudonimo VARCHAR(50) UNIQUE,
genero ENUM('M', 'F'),
fecha_nacimiento DATE NOT NULL,
pais_origen VARCHAR(40) NOT NULL,
fecha_creacion DATETIME DEFAULT current_timestamp
);
CREATE TABLE libros(
libro_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
autor_id INT UNSIGNED NOT NULL,
titulo varchar(50) NOT NULL,
descripcion varchar(250) NOT NULL DEFAULT '',
paginas INTEGER UNSIGNED NOT NULL DEFAULT 0,
fecha_publicacion Date NOT NUll,
fecha_creacion DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (autor_id) REFERENCES autores(autor_id) ON DELETE CASCADE
);
CREATE TABLE usuarios(
usuario_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
nombre varchar(25) NOT NULL,
apellidos varchar(25),
username varchar(25) NOT NULL,
email varchar(50) NOT NULL,
fecha_creacion DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE libros_usuarios(
libro_id INT UNSIGNED NOT NULL,
usuario_id INT UNSIGNED NOT NULL,
FOREIGN KEY (libro_id) REFERENCES libros(libro_id),
FOREIGN KEY (usuario_id) REFERENCES usuarios(usuario_id),
fecha_creacion DATETIME DEFAULT CURRENT_TIMESTAMP
);
ALTER TABLE libros ADD ventas INT UNSIGNED NOT NULL DEFAULT 0;
ALTER TABLE libros ADD stock INT UNSIGNED DEFAULT 10;
CREATE OR REPLACE VIEW prestamos_usuarios_vw AS
SELECT
usuarios.usuario_id,
usuarios.nombre,
usuarios.email,
usuarios.username,
COUNT(usuarios.usuario_id) AS total_prestamos
FROM usuarios
INNER JOIN libros_usuarios ON usuarios.usuario_id = libros_usuarios.usuario_id
GROUP BY usuarios.usuario_id;
INSERT INTO autores (nombre, apellido, seudonimo, fecha_nacimiento, genero, pais_origen )
VALUES ('Stephen Edwin', 'King', 'Richard Bachman', '1947-09-27', 'M', 'USA'),
('Joanne', 'Rowling', 'J.K Rowling', '1947-09-27', 'F', 'Reino unido'),
('Daniel', 'Brown', NULL, '1964-06-22', 'M', 'USA'),
('John', 'Katzenbach ', NULL,'1950-06-23', 'M', 'USA'),
('John Ronald', 'Reuel Tolkien', NULL, '1892-01-03', 'M', 'Reino unido'),
('Miguel', 'de Unamuno', NULL, '1892-01-03', 'M', 'USA'),
('Arturo', 'Pérez Reverte', NULL, '1951-11-25', 'M', 'España'),
('George Raymond', 'Richard Martin', NULL, '1948-09-20', 'M', 'USA');
INSERT INTO libros(autor_id, titulo, fecha_publicacion)
VALUES (1, 'Carrie','1974-01-01'),
(1, 'El misterio de Salmes Lot','1975-01-01'),
(1, 'El resplando','1977-01-01'),
(1, 'Rabia','1977-01-01'),
(1, 'El umbral de la noche','1978-01-01'),
(1, 'La danza de la muerte','1978-01-01'),
(1, 'La larga marcha','1979-01-01'),
(1, 'La zona muerta','1979-01-01'),
(1, 'Ojos de fuego','1980-01-01'),
(1, 'Cujo','1981-01-01'),
(1, 'La torre oscura 1 El pistolero','1982-01-01'),
(1, 'La torre oscura 2 La invocación','1987-01-01'),
(1, 'Apocalipsis','1990-01-01'),
(1, 'La torre oscura 3 Las tierras baldías','1991-01-01'),
(1, 'La torre oscura 4 Bola de cristal','1997-01-01'),
(1, 'La torre oscura 5 Los de Calla','2003-01-01'),
(1, 'La torre oscura 6 La torre oscura','2004-01-01'),
(1, 'La torre oscura 7 Canción de Susannah','2004-01-01'),
(1, 'La niebla','1981-01-01'),
(2, 'Harry Potter y la Piedra Filosofal', '1997-06-30'),
(2, 'Harry Potter y la Cámara Secreta', '1998-07-2'),
(2, 'Harry Potter y el Prisionero de Azkaban','1999-07-8'),
(2, 'Harry Potter y el Cáliz de Fuego','2000-03-20'),
(2, 'Harry Potter y la Orden del Fénix','2003-06-21'),
(2, 'Harry Potter y el Misterio del Príncipe','2005-06-16'),
(2, 'Harry Potter y las Reliquias de la Muerte','2007-07-21'),
(3, 'Origen', '2017-01-01'),
(3, 'Inferno', '2013-01-01'),
(3, 'El simbolo perdido', '2009-01-01'),
(3, 'El código Da Vinci', '2006-01-01'),
(3, 'La consipiración', '2003-01-01'),
(4, 'Al calor del verano', '1982-01-01'),
(4, 'Un asunto pendiente', '1987-01-01'),
(4, 'Juicio Final', '1992-01-01'),
(4, 'La sombra', '1995-01-01'),
(4, 'Juego de ingenios', '1997-01-01'),
(4, 'El psicoanalista', '2002-01-01'),
(4, 'La historia del loco', '2004-01-01'),
(4, 'El hombre equivocado', '2006-01-01'),
(4, 'El estudiante', '2014-01-01'),
(5, 'El hobbit','1937-01-01'),
(5, 'Las dos torres','1954-01-01'),
(5, 'El señor de los anillos','1954-01-01'),
(5, 'La comunidad del anillo','1954-01-01'),
(5, 'El retorno del rey','1955-01-01'),
(6, 'La niebla','1914-01-01'),
(7, 'Eva','2017-01-01'),
(7, 'Falcó','2016-01-01'),
(7, 'Hombre buenos','2015-01-01'),
(7, 'Los barcos se pierden en tierra','2011-01-01'),
(8, 'Juego de tronos','1996-08-01'),
(8, 'Choque de reyes','1998-11-16'),
(8, 'Tormenta de espadas','2005-10-17'),
(8, 'Festin de cuervos','2011-07-12'),
(8, 'Danza de dragones','2011-07-12');
INSERT INTO usuarios (nombre, apellidos, username, email)
VALUES ('Eduardo', 'García', 'eduardogpg', '[email protected]'),
('Codi1', 'Facilito', 'codigofacilito', '[email protected]'),
('Codi2', 'Facilito', 'codigofacilito', '[email protected]'),
('Codi3', 'Facilito', 'codigofacilito', '[email protected]');
INSERT INTO libros_usuarios(libro_id, usuario_id)
VALUES (1, 1), (2, 1), (3, 1), (55, 3), (55, 3), (55, 3);
DELIMITER //
CREATE FUNCTION obtener_paginas()
RETURNS INT
BEGIN
SET @paginas = (SELECT (ROUND( RAND() * 100 ) * 4 ));
RETURN @paginas;
END//
CREATE FUNCTION obtener_ventas()
RETURNS INT
BEGIN
SET @paginas = (SELECT (ROUND( RAND() * 100 ) * 6 ));
RETURN @paginas;
END//
DELIMITER ;
UPDATE libros SET paginas = obtener_paginas();
UPDATE libros SET ventas = obtener_ventas();
DELIMITER //
CREATE PROCEDURE prestamo(usuario_id INT, libro_id INT)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
END;
START TRANSACTION;
INSERT INTO libros_usuarios(libro_id, usuario_id) VALUES(libro_id, usuario_id);
UPDATE libros SET stock = stock - 1 WHERE libros.libro_id = libro_id;
COMMIT;
END//
CREATE PROCEDURE tipo_lector(usuario_id INT)
BEGIN
SET @cantidad = (SELECT COUNT(*) FROM libros_usuarios
WHERE libros_usuarios.usuario_id = usuario_id);
CASE
WHEN @cantidad > 20 THEN
SELECT "Fanatico" AS mensaje;
WHEN @cantidad > 10 AND @cantidad < 20 THEN
SELECT "Aficionado" AS mensaje;
WHEN @cantidad > 5 AND @cantidad < 10 THEN
SELECT "Promedio" AS mensaje;
ELSE
SELECT "Nuevo" AS mensaje;
END CASE;
END//
CREATE PROCEDURE libros_azar()
BEGIN
SET @iteracion = 0;
REPEAT
SELECT libro_id, titulo FROM libros ORDER BY RAND() LIMIT 1;
SET @iteracion = @iteracion + 1;
UNTIL @iteracion >= 5
END REPEAT;
END//
DELIMITER ;