“自连接(Self Join)”是数据库里一个很容易让新手发懵的概念,但其实核心思想很简单:把同一张表当成两张表来用。
下面我用“零基础也能懂”的方式,带你一步步学。
自连接:同一张表自己和自己连接(JOIN)
普通连接是:
表A JOIN 表B
自连接是:
表A AS a JOIN 表A AS b
(给同一张表起两个“别名”)
当数据之间存在层级或关联关系,且都在同一张表里时,就需要自连接。
常见例子:
假设有一张员工表 employee:
| id | name | manager_id |
|---|---|---|
| 1 | 张三 | NULL |
| 2 | 李四 | 1 |
| 3 | 王五 | 1 |
| 4 | 赵六 | 2 |
manager_id 表示“谁是他的上级”查出 员工名 + 他的上级名
SELECT
e.name AS 员工,
m.name AS 上级
FROM employee e
JOIN employee m
ON e.manager_id = m.id;
e:员工视角m:上级视角员工的上级ID = 上级的员工ID| 员工 | 上级 |
|---|---|
| 李四 | 张三 |
| 王五 | 张三 |
| 赵六 | 李四 |
SELECT *
FROM employee
JOIN employee; -- 会报错
✅ 一定要:
FROM employee a
JOIN employee b
记住一句口诀:
“从表连主表”
比如:
如果有人没有上级(比如老板),用 JOIN 会漏掉。
✅ 改成:
SELECT
e.name AS 员工,
m.name AS 上级
FROM employee e
LEFT JOIN employee m
ON e.manager_id = m.id;
这样张三也会显示(上级为 NULL)。
自连接 = 同一张表起两个别名 + 用字段表示层级关系
如果你愿意,我可以:
你现在是刚学 SQL,还是已经在写项目了?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。