Self Join(自连接)在多表查询中具有以下作用:
自连接是一种特殊的表连接方式,它将一个表与自身进行连接。通过这种方式,可以在同一个表中查找满足特定条件的记录对。
查找同一表中的相关记录
实现层次结构数据查询
简化复杂查询
避免笛卡尔积
实现递归查询
假设有一个员工表 employees,结构如下:
| employee_id | name | manager_id |
|---|---|---|
| 1 | Alice | NULL |
| 2 | Bob | 1 |
| 3 | Charlie | 1 |
| 4 | David | 2 |
SELECT
e1.name AS Employee,
e2.name AS Manager,
e3.name AS Subordinate
FROM
employees e1
LEFT JOIN
employees e2 ON e1.manager_id = e2.employee_id
LEFT JOIN
employees e3 ON e1.employee_id = e3.manager_id;
结果:
| Employee | Manager | Subordinate |
|---|---|---|
| Alice | NULL | Bob |
| Alice | NULL | Charlie |
| Bob | Alice | David |
| Charlie | Alice | NULL |
| David | Bob | NULL |
WITH RECURSIVE Subordinates AS (
SELECT
employee_id,
name,
manager_id
FROM
employees
WHERE
name = 'Alice'
UNION ALL
SELECT
e.employee_id,
e.name,
e.manager_id
FROM
employees e
INNER JOIN
Subordinates s ON s.employee_id = e.manager_id
)
SELECT * FROM Subordinates;
结果:
| employee_id | name | manager_id |
|---|---|---|
| 1 | Alice | NULL |
| 2 | Bob | 1 |
| 3 | Charlie | 1 |
| 4 | David | 2 |
总之,自连接是一种强大且灵活的工具,适用于多种复杂的数据查询场景。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。