Nuevo mes, nuevos objetivos. Su ayuda ayuda al proyecto a avanzar. 🖥️ Apoye sqltest →
Código SQL copiado al portapapeles

Base de datos Sakila: esquema, tablas y ejercicios de SQL

Sakila es la base de datos de ejemplo de MySQL que describe una cadena de videoclubes de alquiler de películas en DVD. En SQLtest.online puedes usarla directamente en el navegador: resolver ejercicios con corrección automática y ejecutar tus propias consultas en el playground, sin instalar nada.

  • 16 tablas y 7 vistas
  • 1000 películas
  • 16 044 alquileres
  • 179 ejercicios de SQL

Qué es Sakila

Sakila la creó Mike Hillyer, del equipo de documentación de MySQL, para que los ejemplos de la documentación y de los libros compartieran un mismo esquema realista. Su nombre viene de Sakila, el delfín del logotipo de MySQL, y se distribuye con licencia BSD.

La base modela un negocio corriente: un catálogo de películas con actores y géneros, clientes y empleados de dos tiendas, alquileres de discos y pagos. Por eso es ideal para aprender: las relaciones se entienden sin explicaciones y hay datos suficientes para agrupaciones, funciones de ventana y análisis.

Diagrama ER

El diagrama muestra las tablas de Sakila y las claves foráneas que las unen. Haz clic para abrirlo a tamaño completo.

Diagrama ER de la base de datos Sakila

Qué contiene la base

Las tablas de Sakila se agrupan en tres bloques.

Catálogo de películas

film, actor, category, language y las tablas de relación film_actor, film_category.

Tiendas y personas

store, staff, customer y las direcciones: address → city → country.

Alquileres y pagos

inventory guarda los discos de cada tienda, rental los alquileres y payment los pagos.

Lo principal: el cliente alquila un disco, no una película. Por eso rental se relaciona con film a través de inventory, no directamente. La tabla film_text es una copia auxiliar de títulos y descripciones para la búsqueda de texto completo.

Cuántos datos hay en las tablas principales:

TablaFilasContenido
rental16 044alquileres de discos
payment16 049pagos de clientes
film_actor5462papeles de los actores en las películas
inventory4581discos en las tiendas
film1000películas
customer599clientes
city600ciudades
actor200actores
country109países
category16géneros
store2tiendas

Estructura de las tablas

Haz clic en una tabla para ver sus columnas, una fila de ejemplo y sus claves.

La lista de tablas

actor - tabla de actores.
  • actor_ididentificador único del registro (PK)
  • first_namenombre del actor
  • last_nameapellido del actor
  • last_updatefecha y hora de la última actualización
actor_id first_name last_name last_update
1 John Doe 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (actor_id)
address - direcciones de clientes y personal.
  • address_ididentificador único del registro (PK)
  • addressdirección postal
  • address2dirección adicional
  • districtdistrito o región
  • city_ididentificador de la ciudad (FK)
  • postal_codecódigo postal
  • phonenúmero de teléfono
  • last_updatefecha y hora de la última actualización
address_id address address2 district city_id postal_code phone last_update
1 123 Main St [null] Downtown 1 12345 +1234567890 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (address_id)
  • CLAVE FORÁNEA (city_id) REFERENCIAS city(city_id)
category - categorías de películas.
  • category_ididentificador único del registro (PK)
  • namenombre de la categoría
  • last_updatefecha y hora de la última actualización
category_id name last_update
1 Acción 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (category_id)
city - tabla de ciudades.
  • city_ididentificador único del registro (PK)
  • citynombre de la ciudad
  • country_ididentificador del país (FK)
  • last_updatefecha y hora de la última actualización
city_id city country_id last_update
1 Metropolis 1 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (city_id)
  • CLAVE FORÁNEA (country_id) REFERENCIAS country(country_id)
country - tabla de países.
  • country_ididentificador único del registro (PK)
  • countrynombre del país
  • last_updatefecha y hora de la última actualización
country_id country last_update
1 Estados Unidos 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (country_id)
customer - tabla de clientes.
  • customer_ididentificador único del registro (PK)
  • store_ididentificador de la tienda (FK)
  • first_namenombre del cliente
  • last_nameapellido del cliente
  • emaildirección de correo electrónico del cliente
  • address_ididentificador de la dirección (FK)
  • activeindicador de actividad del cliente (0/1)
  • create_datefecha y hora en que se agregó el cliente a la base de datos
  • last_updatefecha y hora de la última actualización
customer_id store_id first_name last_name email address_id active create_date last_update
1 1 John Doe john.doe@example.com 1 1 2023-01-01 12:00:00 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (customer_id)
  • CLAVE FORÁNEA (store_id) REFERENCIAS store(store_id)
  • CLAVE FORÁNEA (address_id) REFERENCIAS address(address_id)
film - tabla de películas.
  • film_ididentificador único del registro (PK)
  • titletítulo de la película
  • descriptionbreve descripción o trama de la película
  • release_yearaño en que se lanzó la película
  • language_ididentificador del idioma de la película (FK)
  • original_language_ididentificador del idioma original de la película en caso de que esté doblada a un nuevo idioma
  • rental_durationduración del período de alquiler en días
  • rental_ratecosto de alquilar la película por la duración especificada en la columna rental_duration
  • lengthduración de la película en minutos
  • replacement_costmonto de penalización por pérdida o daño del disco
  • ratingcalificación asignada a la película. Puede ser una de: G, PG, PG-13, R, o NC-17
  • special_featureslista de características especiales incluidas en el DVD. Puede ser cero o más de: Tráilers, Comentarios, Escenas eliminadas, Detrás de cámaras
  • last_updatefecha y hora de la última actualización
film_id title description release_year language_id original_language_id rental_duration rental_rate length replacement_cost rating special_features last_update
1 Título de la película Una breve descripción de la película. 2000 1 2 5 4.99 120 19.99 PG-13 Tráilers, Comentarios 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (film_id)
  • CLAVE FORÁNEA (language_id) REFERENCIAS language(language_id)
  • CLAVE FORÁNEA (original_language_id) REFERENCIAS language(language_id)
film_actor - relación actores a películas.
  • actor_ididentificador del actor (FK)
  • film_ididentificador de la película (FK)
  • last_updatefecha y hora de la última

Consultas de ejemplo

Estas consultas muestran cómo se relacionan las tablas. Copia cualquiera y ejecútala en el playground.

Una película y su idioma: una relación sencilla de muchos a uno.

SELECT f.title, l.name AS language, f.rental_rate, f.length
FROM film f
JOIN language l ON l.language_id = f.language_id
ORDER BY f.film_id
LIMIT 3;
titlelanguagerental_ratelength
ACADEMY DINOSAUREnglish0.9986
ACE GOLDFINGEREnglish4.9948
ADAPTATION HOLESEnglish2.9950

Dónde vive un cliente: una cadena de cuatro tablas.

SELECT c.first_name, c.last_name, ci.city, co.country
FROM customer c
JOIN address a ON a.address_id = c.address_id
JOIN city ci ON ci.city_id = a.city_id
JOIN country co ON co.country_id = ci.country_id
ORDER BY c.customer_id
LIMIT 3;
first_namelast_namecitycountry
MARYSMITHSaseboJapan
PATRICIAJOHNSONSan BernardinoUnited States
LINDAWILLIAMSAthenaiGreece

Qué película se alquiló y cuánto se pagó: del alquiler a la película pasando por inventory.

SELECT r.rental_date, f.title, p.amount
FROM rental r
JOIN inventory i ON i.inventory_id = r.inventory_id
JOIN film f ON f.film_id = i.film_id
JOIN payment p ON p.rental_id = r.rental_id
ORDER BY r.rental_id
LIMIT 3;
rental_datetitleamount
2005-05-24 22:53:30BLANKET BEVERLY2.99
2005-05-24 22:54:33FREAKY POCUS2.99
2005-05-24 23:03:39GRADUATE LORD3.99

Ejercicios de SQL por tema

La base Sakila tiene 179 ejercicios, desde consultas SELECT sencillas hasta análisis con funciones de ventana. Las soluciones se comprueban automáticamente en un MySQL real. El número de la derecha es la cantidad de ejercicios del tema; los puntos de color muestran el rango de dificultad.

Por dónde empezar

Los primeros ejercicios de la sección «Base de datos Sakila»:

  1. Obtener los actores
  2. Recuperar Nombres de Actores
  3. Títulos de Películas Ordenados
  4. Las 10 Mejores Películas por Título
  5. Lista de Películas - Tercera Página
  6. Ordenar Películas por Múltiples Campos
  7. La Película Más Larga
  8. Identificar Películas Largas
  9. Encontrar Comedias Largas
  10. Películas Clásicas

Todos los ejercicios de Sakila →

Preguntas frecuentes

¿Hay que instalar MySQL para usar Sakila?

No. Los ejercicios y el playground de SQLtest.online ejecutan las consultas en nuestros servidores, así que basta con un navegador. En el playground, Sakila está disponible en MySQL 8.0, MySQL 9.7 y MariaDB 10.

¿Dónde descargar la base de datos Sakila?

Los archivos oficiales sakila-schema.sql y sakila-data.sql están en la página de bases de datos de ejemplo de MySQL, y la documentación de Sakila los describe.

¿Existe Sakila para PostgreSQL?

Sí, existe una adaptación llamada Pagila. La estructura es la misma, pero algunos tipos y funciones se sustituyen por sus equivalentes de PostgreSQL.

¿Se pueden modificar los datos de Sakila?

En el playground la base es de solo lectura, para que todos vean los mismos datos. Los ejercicios de INSERT, UPDATE y DELETE se ejecutan sobre una copia temporal de la tabla necesaria, y después se comprueba el contenido de esa copia.

¿Sirve Sakila para preparar una entrevista de SQL?

Sí. Con ella es fácil practicar JOIN, agrupaciones, subconsultas y funciones de ventana, los temas que más se preguntan en las entrevistas técnicas.