自连接查询

为什么需要自连接

需求:要查询广东省下的所有市,如果分两张表进行存储,那查询会涉及两张表的查询(省表和市表),会降低查询效率。而如果把它存储在一张表中(省市表),使用自连接查询,会加快查询速度,减少数据表占用的空间。

自连接本质是:同一张表在同一个查询里“出现两次”,分别扮演不同角色(子节点/父节点、员工/领导等),因此必须使用表别名区分。

自连接如何查询

自连接

分别给省市表起一个别名city和province.

select city.* from
areas as city
inner join
areas as province
on city.pid = province.aid
where province.atitle = '广东省';

常见变体:把父节点信息一并查出来

SELECT
  city.atitle AS city_name,
  province.atitle AS province_name
FROM areas AS city
INNER JOIN areas AS province ON city.pid = province.aid
WHERE province.atitle = '广东省';

适用场景与替代建模

关联:连接查询 / 内连接查询 / 外连接查询 / 子查询