Hola a todos, hoy os dejo ejercicios propuestos y resueltos de la base de datos MySQL sakila, que esta basada en un videoclub de películas.
Todos los ejercicios que proponemos están resueltos en este mismo post, intenta hacerlo por ti mismo y si te quedas atascado puedes mirar la solución. Recuerda, que no tiene por que estar igual tu solución con la del post, el objetivo es que aprendas no que me copies la solución.
Aquí te dejo la base de datos de sakila que debes importar. Primero debes importar schema y luego data.
Aquí te dejo un manual sobre como importar la base de datos en MySQL.
Importar una base de datos o esquema en MySQL desde MySQL Workbench
Al final de cada ejercicio, os dejo el resultado esperado de cada consulta. Como algunas contienen muchos datos, indico cuantas filas deberían devolver.
Os dejo el modelo Entidad – Relación de la base de datos:

1. Actores que tienen de primer nombre ‘Scarlett’.
|
1 2 3 |
SELECT * FROM actor WHERE upper(first_name) = 'SCARLETT' |

2. Actores que tienen de apellido ‘Johansson’.
|
1 2 3 |
SELECT * FROM actor WHERE upper(last_name) = 'JOHANSSON' |

3. Actores que contengan una ‘O’ en su nombre.
|
1 2 3 |
SELECT * FROM actor WHERE upper(first_name) LIKE '%O%' |

4. Actores que contengan una ‘O’ en su nombre y en una ‘A’ en su apellido.
|
1 2 3 4 |
SELECT * FROM actor WHERE upper(first_name) LIKE '%O%' AND upper(last_name) LIKE '%A%' |

5. Actores que contengan dos ‘O’ en su nombre y en una ‘A’ en su apellido.
|
1 2 3 4 |
SELECT * FROM actor WHERE upper(first_name) LIKE '%O%O%' AND upper(last_name) LIKE '%A%' |

6. Actores donde su tercera letra sea ‘B’.
|
1 2 3 |
SELECT * FROM actor WHERE upper(first_name) LIKE '__B%' |

7. Ciudades que empiezan por ‘a’.
|
1 2 3 |
SELECT * FROM city WHERE upper(city) LIKE 'A%' |

8. Ciudades que acaban por ‘s’.
|
1 2 3 |
SELECT * FROM city WHERE upper(city) LIKE '%S' |

9. Ciudades del country 61.
|
1 2 3 |
SELECT * FROM city WHERE country_id = 61 |

10. Ciudades del country ‘Spain’.
|
1 2 3 |
SELECT * FROM city WHERE country_id = (SELECT country_id FROM country WHERE upper(country) = 'SPAIN') |

11. Ciudades con nombres compuestos.
|
1 2 3 |
SELECT * FROM city WHERE city LIKE '% %' |


12. Películas con una duración entre 80 y 100.
|
1 2 3 4 5 6 7 8 9 |
SELECT * FROM film WHERE length >= 80 and length <= 100; -- segunda opcion SELECT * FROM film WHERE length between 80 and 100; |



13. Peliculas con un rental_rate entre 1 y 3.
|
1 2 3 4 |
SELECT * FROM film WHERE rental_rate >= 1 AND rental_rate <= 3; |
Debe dar 323 resultados.
14. Películas con un titulo de más de 12 letras.
|
1 2 3 |
SELECT title, length(title) as longitud FROM film WHERE length(title) >= 12; |
Debe dar 807 resultados.
15. Peliculas con un rating de PG o G.
|
1 2 3 4 |
SELECT * FROM film WHERE rating = 'PG' OR rating = 'G' |
Debe dar 372 resultados.
16. Peliculas que no tengan un rating de NC-17.
|
1 2 3 |
SELECT * FROM film WHERE rating <> 'NC-17' |
Debe dar 790 resultados.
17. Peliculas con un rating PG y duracion de más de 120.
|
1 2 3 4 |
SELECT * FROM film WHERe rating = 'PG' AND length >= 120 |
Debe dar 82 resultados.
18. ¿Cuantos actores hay?
|
1 2 |
SELECT COUNT(*) as num_actor FROM actor |

19. ¿Cuántas ciudades tiene el country ‘Spain’?
|
1 2 3 |
SELECT COUNT(*) as num_cities FROM city WHERE country_id = (SELECT country_id from country where upper(country) = 'SPAIN') |

20. ¿Cuántos countries hay que empiezan por ‘a’?
|
1 2 3 |
SELECT COUNT(*) as num_countries FROM country WHERE upper(country) LIKE 'A%' |
![]()
21. Media de duración de peliculas con PG.
|
1 2 3 |
SELECT AVG(length) as media_duracion FROM film WHERE rating = 'PG' |

22. Suma de rental_rate de todas las peliculas.
|
1 2 |
SELECT SUM(rental_rate) as suma_rental FROM film |

23. Pelicula con mayor duración.
|
1 2 |
SELECT MAX(length) as mayor_duracion FROM film |

24. Película con menor duración.
|
1 2 |
SELECT MIN(length) as mayor_duracion FROM film |

25. Mostrar las ciudades del country Spain (multitabla).
|
1 2 3 |
SELECT co.country, c.city FROM city c, country co WHERE c.country_id = co.country_id |
Debe devolver 600 resultados.
26. Mostrar el nombre de la película y el nombre de los actores.
|
1 2 3 4 5 |
SELECT f.title, a.first_name, a.last_name FROM film f, actor a, film_actor fa WHERE f.film_id = fa.film_id AND a.actor_id = fa.actor_id ORDER BY f.title |
Debe devolver 5462 resultados.
27. Mostrar el nombre de la película y el de sus categorías.
|
1 2 3 4 5 |
SELECT f.title, c.name as category FROM film f, category c, film_category ca WHERE f.film_id = ca.film_id AND c.category_id = ca.category_id ORDER BY f.title |
Debe devolver 1000 resultados.
28. Mostrar el country, la ciudad y dirección de cada miembro del staff.
|
1 2 3 4 5 |
SELECT co.country, c.city, a.address, a.address2, s.first_name, s.last_name FROM country co, city c, address a, staff s WHERE co.country_id = c.country_id AND a.city_id = c.city_id AND s.address_id = a.address_id |

29. Mostrar el country, la ciudad y dirección de cada customer.
|
1 2 3 4 5 |
SELECT co.country, c.city, a.address, a.address2, cu.first_name, cu.last_name FROM country co, city c, address a, customer cu WHERE co.country_id = c.country_id AND a.city_id = c.city_id AND cu.address_id = a.address_id |
Debe devolver 599 resultados.
30. Numero de películas de cada rating
|
1 2 3 |
SELECT rating, count(*) FROM film GROUP BY rating |

31. Cuantas películas ha realizado el actor ED CHASE.
|
1 2 3 4 5 6 7 |
SELECT first_name, last_name, count(*) FROM actor a, film f, film_actor fa WHERE f.film_id = fa.film_id AND a.actor_id = fa.actor_id AND first_name = 'ED' AND last_name = 'CHASE' GROUP BY first_name, last_name |

32. Media de duración de las películas cada categoría.
|
1 2 3 4 5 |
SELECT c.name, avg(f.length) as media_duracion FROM category c, film f, film_category fc WHERE c.category_id = fc.category_id AND f.film_id = fc.film_id group by c.name |

Os dejo los videos donde los realizo:
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
En la pregunta 14, en primera instancia entendí que deberían ser más de 12 letras, no que era desde 12 en adelante.
¿como hago una consulta que me de los valores entre dos fechas?
El ejercicio 25 no tiene el resultado correcto. El resultado correcto es de las siguientes 5 ciudades:
A Coruña (La Coruña)
Donostia-San Sebastián
Gijón
Ourense (Orense)
Santiago de Compostela