MySQL Sakila数据库简介

Sakila数据库是一个虚构的数据库,通常用于教学目的,它模拟了一个DVD租赁商店的运营,包含诸如客户、员工、影片、库存、租赁记录等数据,这个数据库常被用作学习SQL查询和关系型数据库操作的实践案例,以下是对Sakila数据库的一些详细介绍和使用示例。
数据库架构
Sakila数据库包含了几个主要的表:
1、actor 存储演员信息。
2、category 存储电影类别信息。
3、customer 存储顾客信息。
4、employee 存储雇员信息。
5、film 存储影片信息。
6、film_actor 关联影片和演员的关系。
7、film_category 关联影片和类别的关系。
8、inventory 存储库存信息。
9、language 存储语言信息。
10、rental 存储租赁信息。
11、rent_payment 存储租金支付信息。
12、sales_by_store 存储按商店的销售信息(视图)。
13、staff 存储员工信息。
14、store 存储商店信息。
常见查询示例
查询所有影片名称及其类别
SELECT f.title AS 'Film Title', GROUP_CONCAT(c.name) AS 'Categories' FROM film f JOIN film_category fc ON f.film_id = fc.film_id JOIN category c ON fc.category_id = c.category_id GROUP BY f.title;
查询每个员工的总租金收入
SELECT e.first_name, e.last_name, SUM(p.amount) AS 'Total Rental Revenue' FROM staff e JOIN rental r ON e.staff_id = r.staff_id JOIN payment p ON r.rental_id = p.rental_id GROUP BY e.first_name, e.last_name;
查询最热门的电影(按租赁次数)
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 COUNT(r.rental_id) DESC LIMIT 1;
相关问题与解答
问题1: 如何更新Sakila数据库中某个特定客户的联系信息?
解答: 假设我们需要更新客户ID为1的联系信息,包括地址和电话号码,可以使用以下SQL语句:
UPDATE customer SET address = '123 New Street, Townsville', phone = '555-1234' WHERE customer_id = 1;
这将会把客户ID为1的客户的地址更新为123 New Street, Townsville,电话更新为555-1234。
问题2: 如何查找在过去一个月内没有进行任何租赁操作的员工?
解答: 需要确定当前日期的一个月前是什么日期,然后选择在这个日期之后没有进行过任何租赁操作的员工,可以使用如下SQL语句:
SELECT e.first_name, e.last_name FROM staff e LEFT JOIN rental r ON e.staff_id = r.staff_id AND r.rental_date > DATE_SUB(CURDATE(), INTERVAL 1 MONTH) WHERE r.rental_id IS NULL;
这个查询将返回过去一个月内没有进行任何租赁操作的所有员工的姓名。