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’.
Spoiler Inside |
SelectShow> |
SELECT *
FROM actor
WHERE upper(first_name) = 'SCARLETT'
|

2. Actores que tienen de apellido ‘Johansson’.
Spoiler Inside |
SelectShow> |
SELECT *
FROM actor
WHERE upper(last_name) = 'JOHANSSON'
|

3. Actores que contengan una ‘O’ en su nombre.
Spoiler Inside |
SelectShow> |
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.
Spoiler Inside |
SelectShow> |
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.
Spoiler Inside |
SelectShow> |
SELECT *
FROM actor
WHERE upper(first_name) LIKE '%O%O%'
AND upper(last_name) LIKE '%A%'
|

6. Actores donde su tercera letra sea ‘B’.
Spoiler Inside |
SelectShow> |
SELECT *
FROM actor
WHERE upper(first_name) LIKE '__B%'
|

7. Ciudades que empiezan por ‘a’.
Spoiler Inside |
SelectShow> |
SELECT *
FROM city
WHERE upper(city) LIKE 'A%'
|
8. Ciudades que acaban por ‘s’.
Spoiler Inside |
SelectShow> |
SELECT *
FROM city
WHERE upper(city) LIKE '%S'
|

9. Ciudades del country 61.
Spoiler Inside |
SelectShow> |
SELECT *
FROM city
WHERE country_id = 61
|

10. Ciudades del country ‘Spain’.
Spoiler Inside |
SelectShow> |
SELECT *
FROM city
WHERE country_id = (SELECT country_id FROM country WHERE upper(country) = 'SPAIN')
|

11. Ciudades con nombres compuestos.
Spoiler Inside |
SelectShow> |
SELECT *
FROM city
WHERE city LIKE '% %'
|


12. Películas con una duración entre 80 y 100.
Spoiler Inside |
SelectShow> |
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.
Spoiler Inside |
SelectShow> |
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.
Spoiler Inside |
SelectShow> |
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.
Spoiler Inside |
SelectShow> |
SELECT *
FROM film
WHERE rating = 'PG'
OR rating = 'G'
|
Debe dar 372 resultados.
16. Peliculas que no tengan un rating de NC-17.
Spoiler Inside |
SelectShow> |
SELECT *
FROM film
WHERE rating <> 'NC-17'
|
Debe dar 790 resultados.
17. Peliculas con un rating PG y duracion de más de 120.
Spoiler Inside |
SelectShow> |
SELECT *
FROM film
WHERe rating = 'PG'
AND length >= 120
|
Debe dar 82 resultados.
18. ¿Cuantos actores hay?
Spoiler Inside |
SelectShow> |
SELECT COUNT(*) as num_actor
FROM actor
|

19. ¿Cuántas ciudades tiene el country ‘Spain’?
Spoiler Inside |
SelectShow> |
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’?
Spoiler Inside |
SelectShow> |
SELECT COUNT(*) as num_countries
FROM country
WHERE upper(country) LIKE 'A%'
|

21. Media de duración de peliculas con PG.
Spoiler Inside |
SelectShow> |
SELECT AVG(length) as media_duracion
FROM film
WHERE rating = 'PG'
|

22. Suma de rental_rate de todas las peliculas.
Spoiler Inside |
SelectShow> |
SELECT SUM(rental_rate) as suma_rental
FROM film
|

23. Pelicula con mayor duración.
Spoiler Inside |
SelectShow> |
SELECT MAX(length) as mayor_duracion
FROM film
|

24. Película con menor duración.
Spoiler Inside |
SelectShow> |
SELECT MIN(length) as mayor_duracion
FROM film
|

25. Mostrar las ciudades del country Spain (multitabla).
Spoiler Inside |
SelectShow> |
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.
Spoiler Inside |
SelectShow> |
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.
Spoiler Inside |
SelectShow> |
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.
Spoiler Inside |
SelectShow> |
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.
Spoiler Inside |
SelectShow> |
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
Spoiler Inside |
SelectShow> |
SELECT rating, count(*)
FROM film
GROUP BY rating
|

31. Cuantas películas ha realizado el actor ED CHASE.
Spoiler Inside |
SelectShow> |
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.
Spoiler Inside |
SelectShow> |
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?