
多表查询的分类2:自连接VS非自连接
1. 非自连接
非自连指的是在多表查询中,连接的是不同的表。我的这篇博文《多表查询的分类1:等值连接和非等值连接》提到的例子都是非自连接。故此不再赘述。
2. 自连接
自连接,顾名思义,就是自己连接自己,指的是在多表查询中连接的是同一张表。
【例子】根据管理者的员工编号 manager_id
,查询员工表 employees
中每一个员工对应的管理者姓名和ID。员工表 employees
如下图所示:
【分析】管理者的员工编号 manager_id
也必定是公司员工,对应着公司的员工编号 employee_id
。因此,我们可以把员工表复制为两份,一份看作员工表 (起别名为 emp
);另一份看作管理者表 (起别名为 mgr
) ,如下图所示,通过 emp
的管理者编号 manager_id
与 mgr
员工编号 employee_id
连接起来。
如下代码所示:
SELECT emp.`employee_id`, emp.`last_name`, mgr.`manager_id`, mgr.`last_name`
FROM employees emp, employees mgr
WHERE emp.`manager_id` = mgr.`employee_id`;
查询结果: