推荐答案
// www.javascriptcn.com code example
SELECT
e1.employee_id AS EmployeeID,
e1.employee_name AS EmployeeName,
e2.employee_name AS ManagerName
FROM
employees e1
JOIN
employees e2
ON
e1.manager_id = e2.employee_id;本题详细解读
什么是自连接 (SELF JOIN)?
自连接是指在同一张表中进行连接操作。通常用于处理表中的层次结构数据,例如员工和经理的关系。自连接通过将表与自身进行连接,使得可以在同一张表中查找相关的记录。
自连接的语法
自连接的语法与普通的连接操作类似,唯一的区别是连接的两张表实际上是同一张表。为了区分连接的两个实例,通常会给表起不同的别名。
// www.javascriptcn.com code example
SELECT
t1.column1,
t2.column2
FROM
table_name t1
JOIN
table_name t2
ON
t1.common_column = t2.common_column;自连接的常见应用场景
- 层次结构数据:例如员工表中,每个员工都有一个经理,经理本身也是员工。通过自连接可以查询每个员工及其经理的信息。
- 查找重复记录:通过自连接可以查找表中重复的记录。
- 比较同一表中的不同记录:例如查找同一表中某些字段值相同的记录。
示例解析
假设有一个员工表 employees,结构如下:
| employee_id | employee_name | manager_id |
|---|---|---|
| 1 | Alice | NULL |
| 2 | Bob | 1 |
| 3 | Charlie | 1 |
| 4 | David | 2 |
我们想要查询每个员工及其经理的名字,可以使用以下 SQL 语句:
// www.javascriptcn.com code example
SELECT
e1.employee_id AS EmployeeID,
e1.employee_name AS EmployeeName,
e2.employee_name AS ManagerName
FROM
employees e1
JOIN
employees e2
ON
e1.manager_id = e2.employee_id;查询结果如下:
| EmployeeID | EmployeeName | ManagerName |
|---|---|---|
| 2 | Bob | Alice |
| 3 | Charlie | Alice |
| 4 | David | Bob |
在这个例子中,e1 和 e2 是 employees 表的两个别名。e1 代表员工,e2 代表经理。通过 e1.manager_id = e2.employee_id 条件,我们将员工与其经理关联起来。