MySQL查询:自关联查询
程序员文章站
2022-08-18 09:38:54
设计省信息的表结构provincesidtitleproid设计市信息的表结构citysidtitleproid设计区县信息表结构areasidtitleproidtitle表示名称,proid表示所属上一级的id值,比如citys.proid 是对应所属省份的id,areas.proid对应的是所属城市的id值问题:能不能将三个表合成一张表呢?思考:观察三张表发现,表的结构都是一样的,存储的都是...
- 设计省信息的表结构provinces
- id
- title
- proid
-
设计市信息的表结构citys
- id
- title
- proid
-
设计区县信息表结构areas
- id
- title
- proid
-
title表示名称,proid表示所属上一级的id值,比如citys.proid 是对应所属省份的id,areas.proid对应的是所属城市的id值
问题:
能不能将三个表合成一张表呢?
思考:
观察三张表发现,表的结构都是一样的,存储的都是地区信息,而且每种信息的数据量有限
意义:
假如合成一张表,即可减少创建表的开销,也用不着多个表关联查询
答案:
定义表areas,结构如下
- id
- atitle
- pid
说明:
- 因为省没有所属的省份,所以可以填写为null
- 城市所属的省份pid,填写省所对应的编号id
- 区县所属的城市pid,填写城市所对应的编号id
- 这就是自关联,表中的某一列,关联了这个表中的另外一列,但是它们的业务逻辑含义是不一样的,城市信息的pid引用的是省信息的id
创建areas表的语句如下:
create table areas(
aid int primary key,
atitle varchar(20),
pid int
);
- 从sql文件中导入数据
source areas.sql;
- 查询一共有多少个省
select count(*) from areas where pid is null;
- 例1:查询省的名称为“山西省”的所有城市
select city.* from areas as city
inner join areas as province on city.pid=province.aid
where province.atitle='山西省';
- 例2:查询市的名称为“广州市”的所有区县
select dis.* from areas as dis
inner join areas as city on city.aid=dis.pid
where city.atitle='广州市';
本文地址:https://blog.csdn.net/qq_36658051/article/details/110631615
下一篇: 【MySQL】索引使用