介绍
在本项目中,你将学习如何在 MySQL 数据库中创建一个「收藏」表。「收藏」表将存储「用户课程」表中每个用户学习时间最长的课程。
👀 预览
MariaDB [labex]> select * from favorite limit 10;
+----+-----------+-------------+------------+
| id | user_name | course_name | study_time |
+----+-----------+-------------+------------+
| 2 | user_01 | 英语 | 101 |
| 3 | user_02 | 语文 | 102 |
| 4 | user_03 | 化学 | 103 |
| 5 | user_04 | 物理 | 104 |
| 6 | user_05 | 生物 | 105 |
| 7 | user_06 | 绘画 | 106 |
| 8 | user_07 | 音乐 | 107 |
| 9 | user_08 | 计算机 | 108 |
| 10 | user_09 | 历史 | 109 |
| 11 | user_10 | 数学 | 110 |
+----+-----------+-------------+------------+
10 rows in set (0.000 sec)
🎯 任务
在本项目中,你将学习:
- 如何使用
sudo命令访问 MySQL 数据库 - 如何将 SQL 脚本中的数据导入 MySQL 数据库
- 如何使用
CREATE TABLE AS语句创建具有特定列的新表 - 如何连接多个表以检索「收藏」表所需的数据
🏆 成果
完成本项目后,你将能够:
- 了解如何使用命令行管理 MySQL 数据库
- 实现一个 SQL 查询,根据多个现有表中的数据创建一个新表
- 应用在表中为每个组查找最大值的概念
- 展示你使用 SQL 语句完成特定数据管理任务的能力
访问 MySQL 并导入数据库
在这一步中,你将学习如何访问 MySQL 数据库并导入所需的数据。
- 打开终端并使用以下命令启动 MySQL 服务:
sudo service mysql start
- 使用以下命令访问 MySQL 客户端:
sudo mysql
- 将
labex_db_info.sql脚本中的数据导入 MySQL:
SOURCE /home/labex/project/labex_db_info.sql;
这将把所需的数据导入到 MySQL 数据库中。
创建收藏表
在这一步中,你将创建「收藏」表,该表将存储每个用户学习时间最长的课程。
- 打开
searchForFavoriteCourses.sql文件。 - 在
searchForFavoriteCourses.sql文件中,创建具有以下列的「收藏」表:id(主键)user_name(用户名)course_name(课程名称)study_time(学习时间)
create table favorite as
SELECT t1.id, t1.user_name, t2.course_name, t1.study_time
FROM (
SELECT a.id, a.course_id, a.study_time, b.user_name
FROM (
SELECT t0.id, t0.user_id, t0.course_id, t0.study_time
FROM usercourse t0
INNER JOIN (
SELECT user_id, MAX(study_time) AS max_study_time
FROM usercourse
GROUP BY user_id
) t_max ON t0.user_id = t_max.user_id AND t0.study_time >= t_max.max_study_time
) a LEFT JOIN user b ON a.user_id = b.user_id
) t1 LEFT JOIN course t2 ON t1.course_id = t2.course_id
此查询通过连接「用户课程」表和「用户」表以获取用户名,然后连接「课程」表以获取课程名称,从而创建「收藏」表。该表存储每个用户学习时间最长的课程。
验证收藏表
在这一步中,你将验证「收藏」表的内容。
- 在 MySQL 提示符下,运行以下命令来执行
searchForFavoriteCourses.sql脚本:
SOURCE /home/labex/project/searchForFavoriteCourses.sql;
- 执行以下查询以显示「收藏」表的前 10 行:
MariaDB [labex]> select * from favorite limit 10;
+----+-----------+-------------+------------+
| id | user_name | course_name | study_time |
+----+-----------+-------------+------------+
| 2 | user_01 | 英语 | 101 |
| 3 | user_02 | 语文 | 102 |
| 4 | user_03 | 化学 | 103 |
| 5 | user_04 | 物理 | 104 |
| 6 | user_05 | 生物 | 105 |
| 7 | user_06 | 绘画 | 106 |
| 8 | user_07 | 音乐 | 107 |
| 9 | user_08 | 计算机 | 108 |
| 10 | user_09 | 历史 | 109 |
| 11 | user_10 | 数学 | 110 |
+----+-----------+-------------+------------+
10 rows in set (0.000 sec)
此查询将显示「收藏」表的前 10 行,展示每条记录的用户名、课程名称和学习时间。
恭喜!你已成功创建「收藏」表并验证了其内容。
总结
恭喜!你已完成本项目。你可以在 LabEx 中练习更多实验来提升你的技能。
