MySQL中的自连接指在同一张表中连接记录,通过表别名区分开来。
自连接的语法格式如下:
sql
SELECT ...
FROM table1 A, table1 B
WHERE ...;
这里使用table1作为两张别名为A和B的表。
例如,有一张emp员工表, Emp—>Mang 表示Emp的manager是Mang。现在要查询每个员工的上级领导:
sql
CREATE TABLE emp (
id INT,
name VARCHAR(20),
manager_id INT
);
INSERT INTO emp VALUES(1, 'John', 3); # John的上级领导是Michael
INSERT INTO emp VALUES(2, 'May', 1); # May的上级领导是John
INSERT INTO emp VALUES(3, 'Michael', NULL);# Michael是总经理,没有上级领导
可以使用自连接进行查询:
sql
SELECT
A.name AS '员工',
B.name AS '上级领导'
FROM emp A, emp B
WHERE A.manager_id = B.id;
输出:
员工 上级领导
May John
John Michael
这条SQL语句将emp表连接了两次,A作为普通员工,B作为相对应的上级领导,通过ON子句中的A.manager_id = B.id条件实现 Mapping 。
自连接的优点:
- 可以在一条SQL语句中直接查询出两张关联表之间的对应关系。
- 避免笛卡尔积,ON或WHERE子句可以有效控制连接条件。
- 可以随时给表起别名,简化关联查询。