MySQL查询:自关联查询
程序员文章站
2022-03-26 10:29:53
设计省信息的表结构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
上一篇: 手写算法-Python代码实现非线性回归
下一篇: 数据库的概念与规则
推荐阅读
-
php入门学习知识点一 PHP与MYSql连接与查询
-
Mysql 单表查询-排序-分页-group by初识
-
mysql连接查询(左连接,右连接,内连接)
-
MySql中使用正则表达式查询的方法
-
django 过滤器-查询集-比较运算符-FQ对象-mysql的命令窗口
-
WPF DataGrid显示MySQL查询信息,且可删除、修改、插入 (原发布 csdn 2018-10-13 20:07:28)
-
mysql导出查询结果到csv的实现方法
-
java操作mysql入门代码实例(含插入、更新和查询)
-
MySQL中间件之ProxySQL(9):ProxySQL的查询缓存功能
-
MySQL查询——select