MySQL之自关联查询
假设要设计两张表,一张省份表(provinces),一张城市表(citys)
- 省份表结构
- id
- ptitle
- 城市表结构
- id
- ctitle
- proid(表示城市所属的省,对应着省份表的id值)
观察两张表可以发现,城市表比省份表多一个字段proid,其它列的字段都是一样的。而且,存储的都是地区信息,而且每种信息的数据量有限,没必要增加一个新表,或者将来还要存储区、乡镇信息,都增加新表的开销太大。
所以定义新表chain,结构:id, name,pid
说明:因为省没有所属的省份,所以可以填写为null,城市所属的省份pid,填写省所对应的编号id
这就是自关联,表中的某一列,关联了这个表中的另外一列,但是它们的业务逻辑含义是不一样的,城市信息的pid引用的是省信息的id
在这个表中,结构不变,可以添加区县、乡镇街道、村社区等信息
准备数据:
1.首先先下载好数据库文件 2.cd:当前路径(文件所在的) 3.进入mysql,执行:use 目标数据库名 4.导入文件:source 数据库文件名
练习:
-- 查询全国有多少个省? select * from china where pid is null; -- 查询山东省有多少个市? select city.* from china as city inner join china as province on city.pid=province.id where province.name="山东省"; -- 查询济南市下面的区县 SELECT county.* FROM china AS county INNER JOIN china AS city ON county.pid=city.id WHERE city.name="济南市";
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?