MYSQL练题笔记-连接-至少有5名直接下属的经理

顺一下笔记总思路:

1.展示题目,看到这篇笔记的朋友,可以看看自己有什么思考呢

2.自己初步的理解,还是觉得很混乱,没有找到明确的思路,只思考出零星的代码,凑不整,可能是想的时间不够长,提供了四种题解留着以后思考,因为觉得还没有很好的思路。

3.看题解后,写下意想不到的点、不会的点、模糊的点、错误的点作为收获的知识。

这一篇好难写!!!!!!!!!可能是一下子看到的题解太多,所以都想把感悟写出来。想记录三个官方题解以及一个格式不标准的题解。

一、题目相关内容

1)相关的表

MYSQL练题笔记-连接-至少有5名直接下属的经理_第1张图片

2)题目

3)帮助你理解题目的示例,同时告诉你查询结果的格式

MYSQL练题笔记-连接-至少有5名直接下属的经理_第2张图片

 

二、各种题解

官方题解算法一:

MYSQL练题笔记-连接-至少有5名直接下属的经理_第3张图片

官方题解算法二:

MYSQL练题笔记-连接-至少有5名直接下属的经理_第4张图片

官方题解算法三:

MYSQL练题笔记-连接-至少有5名直接下属的经理_第5张图片

第四个简略题解:

官方题解下面的我觉得很简略的题解,很值得思考。

MYSQL练题笔记-连接-至少有5名直接下属的经理_第6张图片

我的理解:

我对比着看吧,但是我发现我目前没法理解到位,也就是说没办法让我以后也能写出来这四种,那这里先做个记录以后看。
 

三、到底怎么写题解

看过各种题解后,疑惑的点总结一下到底应该怎么写题解,分为三部分,然后记录下自己错误的点和自己的题解。

 

1.查询的字段应该怎么写

我一开始想的是select name from ,这里的name我刚开始直接通过例子中的输出,name作为查询的字段;

但是很明显如果from后面不把连接查询的结果作为一张表的话,没法这样使用,字段名前必须得加上表名,然后设置别名为name。

 

2.被查询的表应该怎么写

需要自连接是毋庸置疑的,但是中间有个点一直很不清楚,看下面的代码

Employee as Manager join Employee as Report on Manager.Id = Report.ManagerId

我发现我一直没有想清楚Manager.Id = Report.ManagerId,他怎么相同呢,最后显示的结果我脑子里一直没有具体的表格的图像。

 

于是我尝试自己建表看一下中间过程,帮助我的理解(用命令建表半天没建成功,还是用图形化的navicat建了表)

建了个类似于题目的表,如下

MYSQL练题笔记-连接-至少有5名直接下属的经理_第7张图片

然后我尝试加上筛选条件的内连接,看下结果

MYSQL练题笔记-连接-至少有5名直接下属的经理_第8张图片

所以就是符合条件的左右两边的表合并啊,但是我为什么一直没有想清楚啊,可能就是没有多实践。

 

3.筛选条件应该怎么写

Group by要加having之前没有想到,所以要想清楚having使用的作用和时机。

作用是相当于where,满足having后面条件的行才有结果,

时机是对分组后的结果筛选。

 

4.我错误的点,字段前面的表名

刚开始我是写的a,但是不出结果,一直找不出答案。因为按照a进行分组的话,确实是出不了答案的,但是这里我没办法描述出来,只能提醒以后自己注意字段前的表名。

 

5.提供一下,最后我提交的代码,总体是根据第二个题解来的

select a.name name from Employee a join Employee b on a.id=b.managerId group by b.managerId having count(*)>=5;

你可能感兴趣的:(mysql,笔记,数据库)