Новый месяц, новые цели. Ваша помощь помогает проекту двигаться вперед. 🖥️ Поддержите sqltest →
SQL код скопирован в буфер обмена

База данных Sakila: схема, таблицы и SQL-задачи

Sakila — учебная база данных компании MySQL, которая описывает сеть пунктов проката фильмов на DVD. На SQLtest.online с ней можно работать прямо в браузере: решать задачи с автоматической проверкой и писать свои запросы в песочнице, ничего не устанавливая.

  • 16 таблиц и 7 представлений
  • 1 000 фильмов
  • 16 044 записи о прокате
  • 179 SQL-задачи

Что такое Sakila

Sakila создал Майк Хиллиер (Mike Hillyer) из команды документации MySQL, чтобы у примеров в документации и книгах была одна общая и достаточно реалистичная схема. Название база получила в честь дельфина Sakila с логотипа MySQL. Распространяется по лицензии BSD.

База моделирует обычный бизнес: каталог фильмов с актёрами и жанрами, клиентов и сотрудников двух магазинов, прокат дисков и оплату. Поэтому на ней удобно учиться: связи между таблицами понятны без пояснений, а данных хватает для группировок, оконных функций и аналитики.

ER-диаграмма

Диаграмма показывает таблицы Sakila и связи между ними по внешним ключам. Нажмите, чтобы открыть её в полном размере.

ER-диаграмма базы данных Sakila

Из чего состоит база

Таблицы Sakila удобно разделить на три группы.

Каталог фильмов

film, actor, category, language и таблицы связей film_actor, film_category.

Магазины и люди

store, staff, customer и адреса: address → city → country.

Прокат и платежи

inventory — конкретные диски в магазинах, rental — выдачи, payment — оплаты.

Главное, что стоит запомнить: клиент берёт в прокат не фильм, а диск. Поэтому rental связана с film не напрямую, а через inventory. Таблица film_text — вспомогательная копия названий и описаний для полнотекстового поиска.

Сколько данных в основных таблицах:

ТаблицаСтрокЧто хранит
rental16 044выдачи дисков
payment16 049платежи клиентов
film_actor5 462роли актёров в фильмах
inventory4 581диски в магазинах
film1 000фильмы
customer599клиенты
city600города
actor200актёры
country109страны
category16жанры
store2магазины

Структура таблиц

Нажмите на таблицу, чтобы увидеть её столбцы, пример строки и ключи.

Список таблиц

actor - таблица актеров
  • actor_id уникальный идентификатор записи (ПК).
  • first_name имя актера.
  • last_name фамилия актера.
  • last_update дата и время последнего изменения.
Пример структуры таблицы actor
actor_id first_name last_name last_update
1 John Doe 2023-01-01 12:00:00
  • PRIMARY KEY, btree (actor_id)
address - адреса клиентов и сотрудников
  • address_id уникальный идентификатор записи (ПК).
  • address почтовый адрес.
  • address2 дополнительный адрес.
  • district район или регион.
  • city_id идентификатор городов (ВК).
  • postal_code почтовый индекс.
  • phone номер телефона.
  • last_update дата и время последнего изменения.
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
  • PRIMARY KEY, btree (address_id)
  • FOREIGN KEY (city_id) REFERENCES city(city_id)
category - категории фильмов
  • category_id уникальный идентификатор записи (ПК).
  • name название категории.
  • last_update дата и время последнего изменения.
category_id name last_update
1 Action 2023-01-01 12:00:00
  • PRIMARY KEY, btree (category_id)
city - таблица городов
  • city_id уникальный идентификатор записи (ПК).
  • city название города.
  • country_id идентификатор страны (ВК).
  • last_update дата и время последнего изменения.
city_id city country_id last_update
1 Metropolis 1 2023-01-01 12:00:00
  • PRIMARY KEY, btree (city_id)
  • FOREIGN KEY (country_id) REFERENCES country(country_id)
country - таблица стран
  • country_id уникальный идентификатор записи (ПК).
  • country название страны.
  • last_update дата и время последнего изменения.
country_id country last_update
1 United States 2023-01-01 12:00:00
  • PRIMARY KEY, btree (country_id)
customer - таблица клиентов
  • customer_id уникальный идентификатор записи (ПК).
  • store_id идентификатор магазина (ВК).
  • first_name имя клиента.
  • last_name фамилия клиента.
  • email адрес электронной почты клиента.
  • address_id идентификатор адреса (ВК).
  • active идикатор активности клиента (0/1).
  • create_date дата и время добавления в базу данных.
  • last_update дата и время последнего изменения.
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
  • PRIMARY KEY, btree (customer_id)
  • FOREIGN KEY (store_id) REFERENCES store(store_id)
  • FOREIGN KEY (address_id) REFERENCES address(address_id)
film - таблица фильмов
  • film_id уникальный идентификатор записи (ПК).
  • title название фильма.
  • description краткое описание или сюжет фильма.
  • release_year год выхода фильма.
  • language_id id языка фильма (ВК).
  • original_language_id id языка оригинала фильма в случае, если фильм дублирован.
  • rental_duration продолжительность периода аренды в днях.
  • rental_rate стоимость проката фильма на период, указанный в столбце rental_duration.
  • length продолжительность фильма в минутах.
  • replacement_cost штраф за утерю или порчу диска.
  • rating рейтинг, присвоенный фильму. Может быть одним из: G, PG, PG-13, R или NC-17.
  • special_features список общих специальных функций, включенных в DVD. Может быть ноль или более: трейлеры, комментарии, удаленные сцены, за кадром.
  • last_update дата и время последнего изменения.
film_id title description release_year language_id original_language_id rental_duration rental_rate length replacement_cost rating special_features last_update
1 Film Title A brief description of the film. 2000 1 2 5 4.99 120 19.99 PG-13 Trailers, Commentaries 2023-01-01 12:00:00
  • PRIMARY KEY, btree (film_id)
  • FOREIGN KEY (language_id) REFERENCES language(language_id)
  • FOREIGN KEY (original_language_id) REFERENCES language(language_id)
film_actor - отношение актеров и фильмов
  • actor_id идентификатор актера (ВК).
  • film_id идентификатор фильма (ВК).
  • last_update дата и время последнего изменения.
actor_id film_id last_update
1 1 2023-01-01 12:00:00
  • PRIMARY KEY, btree (actor_id, film_id)
  • FOREIGN KEY (actor_id) REFERENCES actor(actor_id)
  • FOREIGN KEY (film_id) REFERENCES film(film_id)
film_category - отношение фильмов к категориям
  • film_id идентификатор фильма (ВК).
  • category_id идентификатор категории (ВК).
  • last_update дата и время последнего изменения.
film_id category_id last_update
1 1 2023-01-01 12:00:00
  • PRIMARY KEY, btree (film_id, category_id)
  • FOREIGN KEY (film_id) REFERENCES film(film_id)
  • FOREIGN KEY (category_id) REFERENCES category(category_id)
inventory - список дисков в филиалах компании
  • inventory_id уникальный идентификатор записи (ПК).
  • film_id идентификатор фильма (ВК).
  • store_id id филиала, где находится диск (ВК).
  • last_update дата и время последнего изменения.
inventory_id film_id store_id last_update
1 23 2 2023-01-01 12:00:00
  • PRIMARY KEY, btree (inventory_id)
  • FOREIGN KEY (film_id) REFERENCES film(film_id)
  • FOREIGN KEY (store_id) REFERENCES store(store_id)
language - языки фильмов
  • language_id уникальный идентификатор записи (ПК).
  • name название языка.
  • last_update дата и время последнего изменения.
language_id name last_update
1 English 2023-01-01 12:00:00
  • PRIMARY KEY, btree (language_id)
payment - платежи клиентов
  • payment_id уникальный идентификатор записи (ПК).
  • customer_id идентификатор клиента (ВК).
  • staff_id id сотрудника принявшего платёж (ВК).
  • rental_id идентификатор записи аренды (ВК).
  • amount сумма платежа.
  • payment_date дата и время платежа.
  • last_update дата и время последнего изменения.
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
  • PRIMARY KEY, btree (payment_id)
  • FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
  • FOREIGN KEY (staff_id) REFERENCES staff(staff_id)
  • FOREIGN KEY (rental_id) REFERENCES rental(rental_id)
rental - таблица аренды дисков
  • rental_id уникальный идентификатор записи (ПК).
  • rental_date дата начала аренды.
  • inventory_id идентификатор диска (ВК).
  • customer_id идентификатор клиента (ВК).
  • return_date дата возврата фильма.
  • staff_id id сотрудника выдавшего диск (ВК).
  • last_update дата и время последнего изменения.
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
  • PRIMARY KEY, btree (rental_id)
  • FOREIGN KEY (inventory_id) REFERENCES inventory(inventory_id)
  • FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
  • FOREIGN KEY (staff_id) REFERENCES staff(staff_id)
staff - сотрудники компании
  • staff_id уникальный идентификатор записи (ПК).
  • first_name имя сотрудника.
  • last_name фамилия сотрудника.
  • address_id идентификатор адреса (ВК).
  • picture фотография сотрудника.
  • email адрес электронной почты сотрудника.
  • store_id id филиала (ВК).
  • active идикатор активности сотрудника (0/1).
  • username имя пользователя для входа в систему.
  • password пароль для входа.
  • last_update дата и время последнего изменения.
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
  • PRIMARY KEY, btree (staff_id)
  • FOREIGN KEY (address_id) REFERENCES address(address_id)
  • FOREIGN KEY (store_id) REFERENCES store(store_id)
store - филиалы компании
  • store_id уникальный идентификатор записи (ПК).
  • manager_staff_id id менеджера магазина (ВК).
  • address_id id адреса (ВК).
  • last_update дата и время последнего изменения.
store_id manager_staff_id address_id last_update
1 1 1 2023-01-01 12:00:00
  • PRIMARY KEY, btree (store_id)
  • FOREIGN KEY (manager_staff_id) REFERENCES staff(staff_id)
  • FOREIGN KEY (address_id) REFERENCES address(address_id)

Примеры запросов

Эти запросы показывают, как связаны таблицы. Скопируйте любой и запустите в песочнице.

Фильм и его язык — простая связь «многие к одному»:

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

Где живёт клиент — цепочка из четырёх таблиц:

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

Какой фильм взяли и сколько заплатили — путь от проката к фильму через 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

SQL-задачи по темам

Задач на базе Sakila: 179 — от простых SELECT до аналитики с оконными функциями. Решение проверяется автоматически на настоящей MySQL. Число справа — количество задач в теме, цветные метки — диапазон сложности.

С чего начать

Первые задачи раздела «База данных Sakila»:

  1. Получить список актёров
  2. Имена актёров
  3. Упорядоченный список фильмов
  4. Первые 10 фильмов по алфавиту
  5. Третья страница списка фильмов
  6. Отсортировать фильмы по нескольким полям
  7. Самый длинный фильм
  8. Длинные фильмы
  9. Длинные комедии
  10. Классические фильмы

Все задачи по Sakila →

Частые вопросы

Нужно ли устанавливать MySQL, чтобы работать с Sakila?

Нет. Задачи и песочница на SQLtest.online выполняют запросы на сервере, достаточно браузера. В песочнице Sakila доступна в MySQL 8.0, MySQL 9.7 и MariaDB 10.

Где скачать базу Sakila?

Официальные файлы sakila-schema.sql и sakila-data.sql лежат на странице примеров баз данных MySQL, описание — в документации Sakila.

Есть ли Sakila для PostgreSQL?

Да, есть порт под названием Pagila. Структура та же, но некоторые типы и функции заменены на аналоги из PostgreSQL.

Можно ли изменять данные в Sakila?

В песочнице база доступна только для чтения, чтобы у всех были одинаковые данные. Задачи на INSERT, UPDATE и DELETE выполняются на временной копии нужной таблицы, после чего проверяется её содержимое.

Подойдёт ли Sakila для подготовки к собеседованию?

Да. На ней удобно отработать JOIN, группировки, подзапросы и оконные функции — темы, которые чаще всего спрашивают на технических интервью.