背景

从上节题目构建的课程数据库中提取每个用户最爱学的课程数据。

右边桌面是实验楼的服务器,服务器中的 MySQL 还没有启动,请注意 MySQL 的 root 账户默认密码为空。启动 MySQL 后会发现已经有了一个 shiyanlou 的数据库,访问的用户名为 shiyanlou,密码为 shiyanlou,shiyanlou 数据库中包含三个表:

  1. user:1000名实验楼用户数据,包含两列,用户ID和用户名
  2. course:10门实验楼课程数据,包含两列,课程ID和课程名
  3. usercourse:100条用户课程学习记录,包含四列,ID,用户ID,课程ID和学习时间(分钟)

目标

查询并将查询结果创建一个新表,任务完成后满足以下要求:

  1. MySQL 服务处于运行状态
  2. 新的表名称为 favorite,包含四列:id(主键),user_name(用户名),course_name(课程名),study_time(学习时间)
  3. favorite 表中存储的是所有在 usercourse 表中有学习记录的用户学习时间最长的课程,如果有多门课程学习时间相同,则都存入该表

提示语

注意 favorite 表中存储的不是用户ID和课程ID,而是用户名和课程名。

知识点

  1. SQL 基本语句
  2. SQL 分组和排序语句
  3. SQL 查询结果创建新表

来源

实验楼测试团队功能测试场景

————————————————————分割线——————————————————————————————————————

1.Linux环境下操作数据库,相对比较麻烦,不能修改,建议先在本机上写好代码再照抄

2.有几个地方需要注意的,前期时间都花在处理坑上了

1)需要启动mysql服务,然后就报错了,报the partition with /var/lib/mysql is too full! #意思是分区满了

 解决办法:重启mysql服务(先关闭再重启)

sudo service mysql stop
   sudo service mysql start
   mysql -ushiyanlou -pshiyanlou  #(重启后直接连接就可以了)

 

2)写好代码后需要转变字符格式成utf8,可以自行百度(mysql表编码格式转换)

——————————————————————分割线————————————————

以下是示例代码(亲测结果为PASS,如有错误请自行检查)

查询到学习记录的用户学习时间最长的课程并排序

select user.name,course.name,usercourse.study_time 
from user,course,usercourse 
where user.id = usercourse.user_id AND course.id = usercourse.course_id 
order by study_time desc

新建一张表,这里不详细说了,很简单,可以自行百度(mysql新建表)

插入前面的查询内容

INSERT INTO favorite (user_name,course_name,study_time) 
select user_name,course_name,study_time
from
select user.name as user_name,course.name as course_name,usercourse.study_time 
from user,course,usercourse 
where user.id = usercourse.user_id AND course.id = usercourse.course_id 
order by study_time desc