非自连指的是在多表查询中,连接的是不同的表。我的这篇博文《多表查询的分类1:等值连接和非等值连接》提到的例子都是非自连接。故此不再赘述。
自连接,顾名思义,就是自己连接自己,指的是在多表查询中连接的是同一张表。
【例子】根据管理者的员工编号 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`;
查询结果:
