搜索收藏课程

SQLSQLBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本项目中,你将学习如何在 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 数据库并导入所需的数据。

  1. 打开终端并使用以下命令启动 MySQL 服务:
sudo service mysql start
  1. 使用以下命令访问 MySQL 客户端:
sudo mysql
  1. labex_db_info.sql脚本中的数据导入 MySQL:
SOURCE /home/labex/project/labex_db_info.sql;

这将把所需的数据导入到 MySQL 数据库中。

创建「收藏」表

在这一步中,你将创建「收藏」表,该表将存储每个用户学习时间最长的课程。

  1. 打开searchForFavoriteCourses.sql文件。

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

此查询通过连接「用户课程」表和「用户」表以获取用户名,然后连接「课程」表以获取课程名称,从而创建「收藏」表。该表存储每个用户学习时间最长的课程。

验证「收藏」表

在这一步中,你将验证「收藏」表的内容。

  1. 在 MySQL 提示符下,运行以下命令来执行searchForFavoriteCourses.sql脚本:
SOURCE /home/labex/project/searchForFavoriteCourses.sql;
  1. 执行以下查询以显示「收藏」表的前 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 中练习更多实验来提升你的技能。