SQL自连接(Self Join)工作原理解析及实例表结构疑问解答
这个SQL自连接的逻辑拆解
先把你贴的SQL整理成可读格式:
select e.first_name, e.salary, e.id, e.manager_id, e.employee_title from employee e join employee e1 on e1.id = e.manager_id where e.salary > e1.salary order by e.manager_id;
表别名e和e1分别是什么?
e就是employee表本身,只是给了个短别名方便写SQL,它包含所有员工的完整数据——每个员工的姓名、薪资、ID、直属经理ID、职位这些字段都在里面。e1同样是employee表的别名,但在这个SQL里它被用来代表员工的直属经理。因为连接条件是e1.id = e.manager_id,所以e1里的每一行,都是对应e表中某个员工的直属经理的信息。
自连接后得到的表是什么样的?
这里用的是内连接(join),它会把e(员工表)和e1(经理视角的员工表)做匹配关联:
只有当某员工的manager_id恰好等于某个人的id时,这两行数据才会被合并成一行。合并后的每一行,同时包含该员工的所有信息和他直属经理的所有信息(你的SQL只选取了员工的字段,但连接过程中是把两组数据合并在一起的)。
最后这个SQL的实际作用
加上where e.salary > e1.salary的筛选条件后,最终结果就是所有薪资比自己直属经理还高的员工列表,并且按经理ID做了排序。
内容的提问来源于stack exchange,提问作者Thedh
相关产品推荐
相关产品推荐

