MySQL Sakila数据库介绍

Sakila是一个示例数据库,它由MySQL提供,用于展示MySQL的功能,这个数据库模拟了一个电影出租商店的运营,包括租户、库存、员工和店铺等信息。
数据库结构
Sakila数据库包含多个表格,每个表格都有特定的功能:
actor: 记录演员信息。
film: 存储电影数据。
film_actor: 关联电影和演员的表格。
film_category: 描述电影类别。
film_text: 存储电影的描述和评论。
inventory: 库存信息,显示哪些电影在哪个店铺有多少份拷贝。
rental: 记录租赁信息。
payment: 支付详情。
customer: 客户信息。
store: 商店信息。
staff: 员工信息。
category: 电影分类。
创建表的SQL语句示例
创建一个新表(如“film”表)的SQL语句如下:
CREATE TABLE film (
film_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
description TEXT,
release_year YEAR,
language_id TINYINT UNSIGNED,
original_language_id TINYINT UNSIGNED,
rental_duration TINYINT(3) UNSIGNED NOT NULL DEFAULT 3,
rental_rate DECIMAL(4,2),
length SMALLINT UNSIGNED,
replacement_cost DECIMAL(5,2),
rating ENUM('G','PG','PG-13','R','NC-17') DEFAULT 'G',
special_features SET('Trailers','Commentaries','Deleted Scenes','Behind the Scenes'),
last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (film_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
查询示例
一个简单的查询示例,比如查找所有“动作”类的电影:
SELECT f.title FROM film f JOIN film_category fc ON f.film_id = fc.film_id JOIN category c ON c.category_id = fc.category_id WHERE c.name = 'Action';
单元表格
| 字段名 | 类型 | 描述 |
| film_id | SMALLINT UNSIGNED | 电影的唯一标识符 |
| title | VARCHAR(255) | 电影标题 |
| description | TEXT | 电影描述 |
| release_year | YEAR | 发行年份 |
| rental_duration | TINYINT(3) UNSIGNED | 租赁时长(天) |
| rental_rate | DECIMAL(4,2) | 租赁费率 |
| rating | ENUM | 评级 |
| special_features | SET | 特殊功能 |
| last_update | TIMESTAMP | 最后更新时间 |
相关问题与解答栏目
Q1: Sakila数据库中如何找到最受欢迎的五部电影?
A1: 可以通过统计每部电影的租赁次数来找出最受欢迎的五部电影,以下是查询SQL语句的示例:
SELECT f.title, COUNT(r.rental_id) AS rental_count FROM film f JOIN inventory i ON f.film_id = i.film_id JOIN rental r ON i.inventory_id = r.inventory_id GROUP BY f.title ORDER BY rental_count DESC LIMIT 5;
Q2: 如果我想查看某个顾客的所有租赁历史,应该如何编写SQL查询?
A2: 你可以使用顾客ID来连接customer和rental表,并进一步连接到inventory和film表以获取电影详情,以下是一个查询的示例:
SELECT c.customer_id, c.first_name, c.last_name, f.title, r.rental_date FROM customer c JOIN rental r ON c.customer_id = r.customer_id JOIN inventory i ON r.inventory_id = i.inventory_id JOIN film f ON i.film_id = f.film_id WHERE c.customer_id = [指定的顾客ID];
替换[指定的顾客ID]为你想要查询的具体顾客ID即可。