MySQL中的自连接是什么?

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 。

自连接的优点:

  1. 可以在一条SQL语句中直接查询出两张关联表之间的对应关系。
  2. 避免笛卡尔积,ON或WHERE子句可以有效控制连接条件。
  3. 可以随时给表起别名,简化关联查询。