-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathev.mod2.Arellis.sql
326 lines (253 loc) · 8.22 KB
/
ev.mod2.Arellis.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
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
USE sakila
-- 1. Selecciona todos los nombres de las películas sin que aparezcan duplicados.
SELECT *
FROM film;
-- Si queremos ver los nombres solo una vez (sin repetición) Usamos DISTINCT para que nos devuelva valores unicos.
SELECT DISTINCT title
FROM film;
-- 2. Muestra los nombres de todas las películas que tengan una clasificación de "PG-13"
SELECT*
FROM film
SELECT title, rating
FROM film
WHERE rating = 'PG-13';
-- 3. Encuentra el título y la descripción de todas las películas que contengan la palabra "amazing" en su descripción.
SELECT title, description
FROM film
WHERE description LIKE '%amazing%'
-- 4. Encuentra el título de todas las películas que tengan una duración mayor a 120 minutos.
SELECT*
FROM film
SELECT title, length
FROM film
WHERE length > 120;
-- 5. Encuentra los nombres de todos los actores, muestralos en una sola columna que se llame nombre_actor y contenga nombre y apellido.
SELECT CONCAT(first_name, ' ', last_name) AS nombre_actor
FROM actor;
-- 6. Encuentra el nombre y apellido de los actores que tengan "Gibson" en su apellido.
SELECT CONCAT(first_name, ' ', last_name) AS nombre_actor
FROM actor
WHERE last_name LIKE '%Gibson%'
-- 7. Encuentra los nombres de los actores que tengan un actor_id entre 10 y 20.
SELECT CONCAT(first_name, ' ', last_name) AS nombre_actor, actor_id
FROM actor
WHERE actor_id BETWEEN 10 AND 20;
-- 8. Encuentra el título de las películas en la tabla film que no tengan clasificacion "R" ni "PG-13".
SELECT title AS titulo_de_pelicula, rating AS clasificacion
FROM film
WHERE rating NOT IN('R', 'PG-13');
-- 9. Encuentra la cantidad total de películas en cada clasificación de la tabla film y muestra la clasificación junto con el recuento.
SELECT*
FROM film
SELECT rating, COUNT(film_id) AS total_peliculas
FROM film
GROUP BY rating;
-- 10. Encuentra la cantidad total de películas alquiladas por cada cliente y muestra el ID del cliente, su
-- nombre y apellido junto con la cantidad de películas alquiladas.
SELECT*
FROM rental;
SELECT*
FROM customer;
SELECT r.customer_id, c.first_name, c.last_name, COUNT(r.rental_id) AS total_alquiladas
FROM customer c
INNER JOIN rental r
ON c.customer_id = r.customer_id
GROUP BY r.customer_id;
-- 11. Encuentra la cantidad total de películas alquiladas por categoría y muestra el nombre de la
-- categoría junto con el recuento de alquileres.
SELECT*
FROM rental;
SELECT*
FROM inventory;
SELECT*
FROM film_category;
SELECT*
FROM category;
SELECT c.name, COUNT(r.rental_id) AS cantidad
FROM rental r
INNER JOIN inventory i
ON r.inventory_id = i.inventory_id
INNER JOIN film_category fc
ON i.film_id = fc.film_id
INNER JOIN category c
ON fc.category_id = c.category_id
GROUP BY c.name;
-- 12. Encuentra el promedio de duración de las películas para cada clasificación de la tabla film y
-- muestra la clasificación junto con el promedio de duración.
SELECT*
FROM film;
SELECT rating, AVG(length) AS duracion_promedia
FROM film
GROUP BY rating;
-- 13. Encuentra el nombre y apellido de los actores que aparecen en la película con title "Indian Love".
SELECT*
FROM actor;
SELECT*
FROM film_actor;
SELECT*
FROM film;
SELECT a.first_name, a.last_name, f.title
FROM actor a
INNER JOIN film_actor fa
ON a.actor_id = fa.actor_id
INNER JOIN film f
ON fa.film_id = f.film_id
WHERE f.title = 'Indian Love';
-- 14. Muestra el título de todas las películas que contengan la palabra "dog" o "cat" en su descripción.
SELECT title, description
FROM film
WHERE description LIKE '%dog%' OR '%cat%' -- usamos like para especificar la busqueda en la que dog o cat puedan tener palabras por delante o detras
-- 15. Hay algún actor o actriz que no apareca en ninguna película en la tabla film_actor.
-- A-
SELECT*
FROM actor;
SELECT*
FROM film_actor;
SELECT a.first_name, a.last_name
FROM actor a
INNER JOIN film_actor fa
ON a.actor_id = fa.actor_id
WHERE fa.actor_id IS NULL
-- B-
SELECT a.first_name AS nombre, a.last_name AS apellido
FROM actor a
WHERE a.actor_id NOT IN ( -- SEGUNDA OPCION. PREGUNTAR¿?
SELECT fa.actor_id
FROM film_actor fa
);
-- 16. Encuentra el título de todas las películas que fueron lanzadas entre el año 2005 y 2010.
USE sakila
SELECT title, release_year
FROM film
WHERE release_year BETWEEN 2005 AND 2010;
-- 17. Encuentra el título de todas las películas que son de la misma categoría que "Family".
SELECT*
FROM film;
SELECT*
FROM film_category;
SELECT*
FROM category;
SELECT f.title, c.name
FROM film f
INNER JOIN film_category fc
ON f.film_id = fc.film_id
INNER JOIN category c
ON fc.category_id = c.category_id
WHERE c.name = 'family'
-- 18. Muestra el nombre y apellido de los actores que aparecen en más de 10 películas.
SELECT *
FROM actor;
SELECT *
FROM film_actor;
SELECT a.first_name, a.last_name, COUNT(fa.film_id) AS total_peliculas
FROM actor a
INNER JOIN film_actor fa
ON a.actor_id = fa.actor_id
GROUP BY a.actor_id
HAVING COUNT(fa.film_id) > 10;
-- 19. Encuentra el título de todas las películas que son "R" y tienen una duración mayor a 2 horas en la tabla film.
SELECT*
FROM film
SELECT title, rating, length
FROM film
WHERE rating = 'R' AND length > 120;
-- 20. Encuentra las categorías de películas que tienen un promedio de duración superior a 120
-- minutos y muestra el nombre de la categoría junto con el promedio de duración.
SELECT *
FROM category;
SELECT *
FROM film_category;
SELECT *
FROM film;
SELECT c.name, AVG(f.length) AS duracion_media
FROM category c
INNER JOIN film_category fc
ON c.category_id = fc.category_id
INNER JOIN film f
ON fc.film_id = f.film_id
GROUP BY c.name
HAVING AVG(f.length) > 120
-- 21. Encuentra los actores que han actuado en al menos 5 películas y muestra el nombre del actor
-- junto con la cantidad de películas en las que han actuado.
SELECT*
FROM actor;
SELECT*
FROM film_actor;
SELECT CONCAT(a.first_name, ' ', a.last_name) AS actor, COUNT(fa.film_id) AS total_peliculas
FROM actor a
INNER JOIN film_actor fa
ON a.actor_id = fa.actor_id
GROUP BY a.actor_id
HAVING COUNT(fa.film_id) >= 5
-- 22. Encuentra el título de todas las películas que fueron alquiladas durante más de 5 días. Utiliza una
-- subconsulta para encontrar los rental_ids con una duración superior a 5 días y luego selecciona
-- las películas correspondientes. Pista: Usamos DATEDIFF para calcular la diferencia entre una
-- fecha y otra, ej: DATEDIFF(fecha_inicial, fecha_final)
SELECT *
FROM film;
SELECT *
FROM inventory;
SELECT *
FROM rental;
-- DATEDIFF: segun chat GPT, calcula la diferencia entre dos fechas. Nos ayuda a saber cuantos días han pasado entre ambas fechas
-- primero quiero saber cuales fueron alquiladas mas de 5 dias y con la pista nos ayudaremos!
-- OPCION A
SELECT DISTINCT title
FROM film
WHERE film_id IN (
SELECT film_id
FROM inventory
WHERE inventory_id IN (
SELECT inventory_id
FROM rental
WHERE DATEDIFF(return_date, rental_date) > 5
)
);
-- OPCION B
SELECT f.title AS peliculas_alquiladas
FROM film f
WHERE f.film_id IN (
SELECT i.film_id
FROM rental r
INNER JOIN inventory i
ON i.inventory_id = r.inventory_id
WHERE DATEDIFF(r.return_date, r.rental_date) > 5
);
-- 23. Encuentra el nombre y apellido de los actores que no han actuado en ninguna película de la categoría "Horror".
-- Utiliza una subconsulta para encontrar los actores que han actuado en películas de la categoría "Horror" y luego exclúyelos de la lista de actores.
SELECT *
FROM actor;
SELECT *
FROM film_actor;
SELECT *
FROM film_category;
SELECT *
FROM category;
SELECT a.first_name, a.last_name
FROM actor a
WHERE a.actor_id NOT IN(
SELECT fa.actor_id
FROM film_actor fa
INNER JOIN film_category fc
ON fa.film_id = fc.film_id
INNER JOIN category c
ON fc.category_id = c.category_id
WHERE c.name = 'horror'
);
-- 24. BONUS: Encuentra el título de las películas que son comedias y tienen una duración mayor a 180
-- minutos en la tabla film con subconsultas.
SELECT *
FROM film;
SELECT *
FROM film_category;
SELECT *
FROM category;
SELECT f.title AS pelicula, f.length AS duracion
FROM film f
WHERE f.film_id IN (
SELECT fc.film_id
FROM film_category fc
INNER JOIN category c
ON fc.category_id = c.category_id
WHERE c.name = 'comedy' AND f.length > 180
);