🎯 Quedan pocos días este mes Apoya SQLTest.online y ayúdanos a mantener la práctica de SQL gratuita para todos. Dona hoy →
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
  • 182 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 actualización
actor_id film_id last_update
1 1 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (actor_id, film_id)
  • CLAVE FORÁNEA (actor_id) REFERENCIAS actor(actor_id)
  • CLAVE FORÁNEA (film_id) REFERENCIAS film(film_id)
film_category - relación películas a categorías.
  • film_ididentificador de la película (FK)
  • category_ididentificador de la categoría (FK)
  • last_updatefecha y hora de la última actualización
film_id category_id last_update
1 1 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (film_id, category_id)
  • CLAVE FORÁNEA (film_id) REFERENCIAS film(film_id)
  • CLAVE FORÁNEA (category_id) REFERENCIAS category(category_id)
inventory - inventario de discos en las tiendas.
  • inventory_ididentificador único del registro (PK)
  • film_ididentificador de la película (FK)
  • store_ididentificador de la tienda donde se encuentra el disco (FK)
  • last_updatefecha y hora de la última actualización
inventory_id film_id store_id last_update
1 23 2 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (inventory_id)
  • CLAVE FORÁNEA (film_id) REFERENCIAS film(film_id)
  • CLAVE FORÁNEA (store_id) REFERENCIAS store(store_id)
language - idiomas de las películas.
  • language_ididentificador único del registro (PK)
  • namenombre del idioma
  • last_updatefecha y hora de la última actualización
language_id name last_update
1 English 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (language_id)
payment - pagos de los clientes.
  • payment_ididentificador único del registro (PK)
  • customer_ididentificador del cliente (FK)
  • staff_ididentificador del empleado que recibió el pago (FK)
  • rental_ididentificador del alquiler (FK)
  • amountimporte del pago
  • payment_datefecha y hora del pago
  • last_updatefecha y hora de la última actualización
payment_id customer_id staff_id rental_id amount payment_date last_update
1 1 1 1 4.99 2023-01-01 12:13:14 2023-01-01 12:14:15
  • CLAVE PRIMARIA, btree (payment_id)
  • CLAVE FORÁNEA (customer_id) REFERENCIAS customer(customer_id)
  • CLAVE FORÁNEA (staff_id) REFERENCIAS staff(staff_id)
  • CLAVE FORÁNEA (rental_id) REFERENCIAS rental(rental_id)
rental - alquileres de los clientes.
  • rental_ididentificador único del registro (PK)
  • rental_datefecha de inicio del alquiler
  • inventory_ididentificador del disco (FK)
  • customer_ididentificador del cliente (FK)
  • return_datefecha de devolución de la película
  • staff_ididentificador del empleado que entregó el disco (FK)
  • last_updatefecha y hora de la última actualización
rental_id rental_date inventory_id customer_id return_date staff_id last_update
1 2023-01-01 16:15:21 1 1 2023-01-10 09:12:36 1 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (rental_id)
  • CLAVE FORÁNEA (inventory_id) REFERENCIAS inventory(inventory_id)
  • CLAVE FORÁNEA (customer_id) REFERENCIAS customer(customer_id)
  • CLAVE FORÁNEA (staff_id) REFERENCIAS staff(staff_id)
staff - empleados de la empresa.
  • staff_ididentificador único del registro (PK)
  • first_namenombre del empleado
  • last_nameapellido del empleado
  • address_ididentificador de la dirección (FK)
  • picturefoto del empleado
  • emaildirección de correo electrónico del empleado
  • store_ididentificador de la tienda (FK)
  • activeindicador de actividad del empleado (0/1)
  • usernamenombre de usuario para iniciar sesión
  • passwordcontraseña para iniciar sesión
  • last_updatefecha y hora de la última actualización
staff_id first_name last_name address_id picture email store_id active username password last_update
1 John Doe 1 [null] john.doe@example.com 1 1 johndoe ******** 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (staff_id)
  • CLAVE FORÁNEA (address_id) REFERENCIAS address(address_id)
  • CLAVE FORÁNEA (store_id) REFERENCIAS store(store_id)
store - tiendas de la empresa.
  • store_ididentificador único del registro (PK)
  • manager_staff_ididentificador del gerente de la tienda (FK)
  • address_ididentificador de la dirección (FK)
  • last_updatefecha y hora de la última actualización
store_id manager_staff_id address_id last_update
1 1 1 2023-01-01 12:00:00
  • CLAVE PRIMARIA, btree (store_id)
  • CLAVE FORÁNEA (manager_staff_id) REFERENCIAS staff(staff_id)
  • CLAVE FORÁNEA (address_id) REFERENCIAS address(address_id)

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 182 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.