-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconsultas_reunion.sql
188 lines (179 loc) · 5.1 KB
/
consultas_reunion.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
-- CR #1: Obras disponibles (que no están en préstamo), ordenadas por género y autor
SELECT
mp.titulo AS nombre_obra,
mp.id_material,
mp.genero,
c.nombre AS nombre_autor,
c.apellido1 AS apellido1_autor,
c.apellido2 AS apellido2_autor
FROM
material_prestamo mp
JOIN creador c ON mp.creador = c.id_creador
WHERE
mp.fecha_prestamo IS NULL
ORDER BY
mp.genero,
c.nombre,
c.apellido1,
c.apellido2;
-- CR #2: Prestamos actuales de todos los usuarios, imprimiendo sólo el nombre de la obra, el nombre del usuario, la fecha del prestamo y el nombre del empleado
SELECT
mp.titulo AS nombre_obra,
s.nombre AS nombre_socio,
mp.fecha_prestamo AS fecha_prestamo,
e.nombre AS nombre_empleado
FROM
material_prestamo mp
JOIN socio s ON mp.socio_prestamo = s.id_socio
JOIN empleado e ON mp.empleado_prestamo = e.dni
WHERE
mp.fecha_prestamo IS NOT NULL;
-- CR #3: Ordenadores en uso, junto con el usuario actualmente usándolos.
SELECT
o.id_ordenador,
o.so,
o.modelo,
o.fecha_prestamo,
s.nombre AS nombre_usuario
FROM
ordenador o
JOIN socio s ON s.id_socio = o.usuario;
-- CR #4: Prestamos actuales de José, imprimiendo sólo el nombre de la obra y la fecha del préstamo.
SELECT
s.nombre AS nombre_socio,
mp.titulo AS nombre_obra,
mp.fecha_prestamo
FROM
socio s
JOIN material_prestamo mp ON s.id_socio = mp.socio_prestamo
WHERE
s.id_socio = (
SELECT
id_socio
FROM
socio
WHERE
nombre = 'José'
AND apellido1 = 'González'
AND apellido2 = 'Pérez'
);
-- CR #5: Prestamos previos de una obra (Crimen y Castigo)
-- (tras ejecutar la transacción 1, debería devolver un préstamo, el de María)
SELECT
mp.titulo AS nombre_obra,
pp.fecha_prestamo,
pp.fecha_devolucion,
s.nombre AS nombre_socio
FROM
material_prestamo mp
JOIN prestamo_previo pp ON mp.id_material = pp.material
JOIN socio s ON pp.socio_prestamo = s.id_socio
WHERE
mp.titulo = 'Crimen y castigo';
-- CR #6: Usos previos de un ordenador, incluyendo la información del préstamo
SELECT
o.id_ordenador,
o.so,
o.modelo,
up.fecha_prestamo,
up.fecha_devolucion,
s.nombre AS nombre_socio,
e.nombre AS nombre_empleado
FROM
ordenador o
JOIN uso_previo up ON o.id_ordenador = up.id_ordenador
JOIN socio s ON up.usuario = s.id_socio
JOIN empleado e ON up.empleado_prestamo = e.dni
WHERE
o.id_ordenador = 3000001;
-- CR #7: Prestamos, actuales y pasados, manejados por un empleado (en este caso, Juan)
-- Los préstamos actuales tendrán NULL en la fecha de devolución
SELECT
mp.titulo AS nombre_obra,
mp.fecha_prestamo,
NULL AS fecha_devolucion,
s.nombre AS nombre_socio,
e.nombre AS nombre_empleado
FROM
material_prestamo mp
JOIN socio s ON mp.socio_prestamo = s.id_socio
JOIN empleado e ON mp.empleado_prestamo = e.dni
WHERE
e.dni = '00000000Y'
UNION
ALL
SELECT
mp.titulo AS nombre_obra,
pp.fecha_prestamo,
pp.fecha_devolucion,
s.nombre AS nombre_socio,
e.nombre AS nombre_empleado
FROM
prestamo_previo pp
JOIN material_prestamo mp ON pp.material = mp.id_material
JOIN socio s ON pp.socio_prestamo = s.id_socio
JOIN empleado e ON pp.empleado_prestamo = e.dni
WHERE
e.dni = '00000000Y'
ORDER BY
fecha_devolucion DESC,
-- esto asegura que se imprimen primero los préstamos actuales, luego los pasados (DESC - descendiente)
fecha_prestamo;
-- CR #8: Obras cuyo creador es estadounidense, ordenadas por número de veces que han sido prestadas
SELECT
mp.titulo AS nombre_obra,
mp.genero,
c.nombre AS nombre_autor,
c.apellido1 AS apellido1_autor,
c.apellido2 AS apellido2_autor,
COUNT(pp.material) AS veces_prestada
FROM
material_prestamo mp
JOIN prestamo_previo pp ON mp.id_material = pp.material
JOIN creador c ON mp.creador = c.id_creador
WHERE
c.nacionalidad = 'EEUU'
GROUP BY
mp.titulo,
mp.genero,
c.nombre,
c.apellido1,
c.apellido2
ORDER BY
veces_prestada DESC;
-- CR #9: De cada socio, imprimir su nombre y préstamos previos (sólo nombre de obra y fecha de prestamo y devolucion)
SELECT
s.nombre AS nombre_socio,
mp.titulo AS nombre_obra,
mp.tipo AS tipo_material,
pp.fecha_prestamo,
pp.fecha_devolucion
FROM
socio s
JOIN prestamo_previo pp ON s.id_socio = pp.socio_prestamo
JOIN material_prestamo mp ON pp.material = mp.id_material
ORDER BY
s.nombre,
pp.fecha_prestamo;
-- CR #10: Contar el número de CDs y libros prestados (y devueltos) por cada socio, y ordenar por número de material total prestado
SELECT
s.nombre AS nombre_socio,
COUNT(
CASE
WHEN mp.tipo = 'libro' THEN 1
END
) AS total_libros,
COUNT(
CASE
WHEN mp.tipo = 'CD' THEN 1
END
) AS total_cds,
COUNT(pp.material) AS total_prestamos
FROM
socio s
JOIN prestamo_previo pp ON s.id_socio = pp.socio_prestamo
JOIN material_prestamo mp ON pp.material = mp.id_material
GROUP BY
s.nombre
ORDER BY
total_prestamos DESC;