1. 任务背景
Datawhale组队学习中MySQL一周学习任务,通过一周组队自主学习,快速熟悉MySQL相关基础知识,并能掌握基本的数据查询操作方式
1.1 任务内容
- 数据导入导出 (见附件)
- 将Excel文件导入MySQL表
- MySQL导出表到Excel文件
2. 数据导入
根据给定excel内容,先建立表格
1 | CREATE TABLE IF NOT EXISTS `employees` ( |
一般MySQL导入只支持CSV格式,因此先将xlsx格式转换为CSV格式
由于提供的表格中有多个sheet,直接进行格式转换会报错,因此删去了空的sheet1
此时即可看见数据已经全部导入成功
通过观察表,在某一行reportsTo字段存在缺失值,暂时没找到好方法,于是去掉了这个字段的NOT NULL限制
2. 作业
2.1 作业一
2.1.1 作业内容
1 | 项目七: 各部门工资最高的员工(难度:中等) |
2.1.2 建表和数据导入
1 | CREATE TABLE IF NOT EXISTS `employee` ( |
2.1.3 作业思路
首先先根据employee表,找出其中各部门工资最高的那个,然后根据department_id联结department表,找出department的name
2.1.4 SQL实现
1 | SELECT |
得到结果
1 | +------------+----------+--------+ |
2.2 作业二 换座位(难度:中等)
2.2.1 作业内容
1 | 小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。 |
2.2.2 建表和数据导入
1 | CREATE TABLE IF NOT EXISTS `seat` ( |
2.2.3 作业思路
这个需要多次查询结果,可以用UNION来进行联合,但是需要注意的是,当id为奇数时,如果其已经是最后一个了,那它此时显示的id是不应该变化的,因此需要进行相应调整
2.2.4 SQL实现
1 | SELECT |
其中这个As a
如果不加,会报错,具体原因还需要研究
1 | Every derived table must have its own alias |
得到结果
1 | +----+---------+ |
2.3 作业三 分数排名(难度:中等)
2.3.1 作业内容
1 | 编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。 |
2.3.2 建表和数据导入
1 | CREATE TABLE IF NOT EXISTS `scores` ( |
2.3.3 作业思路
其中一种常见方法是设置变量来做,但因为目前内容没有涉及,所以结合题意用了另一种方式,即看大于等于这个成绩的有多少个,即为其并列排名
2.3.4 SQL实现
1 | SELECT |
得到结果
1 | +-------+------+ |