mysql--自关联、子查询

本文探讨如何使用MySQL中的自关联和子查询来实现全国区域选择,包括省、市、区的数据组织。通过自关联解决省市县层级的关系,同时展示如何一次性查询出指定城市的区县信息,例如从山东省查询青岛市的区县数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
我们要做一个全国的区域选择 包括 省 市 区…

在这里插入图片描述
这样的三张表 可以合并为一张表
在这里插入图片描述
在一个表中,一列用到了另一列的值 ,叫做自关联。

自关联一般用作省市县、公司上下级、

-- 创建一个新的表格 areas
create table areas(
aid int primary key,
atitle varchar(20),
pid int
);
-- 插入数据
insert into areas values(10000, '河北省', null);
insert into areas values(10001, '北京市', 10000);
insert into areas values(10002, '山东省', null);
insert into areas values(10003, '青岛市', 10002);
insert into areas values(10004, '崂山区', 10003);
...

在这里插入图片描述
如何讲一个文件数据插入到表中,首先放在同一个路径下,然后打开所在数据库。
在这里插入图片描述
然后: 文件名是 areas.sql

source areas.sql
--查询所有的省份  
select * from areas where pid is null;

在这里插入图片描述
在这里插入图片描述

--查看山东省有多少地级市  

		--先找到山东的aid
		select aid from areas where atitle='山东省'
		
		--查看山东省有多少地级市
		select * from areas where pid=370000;

在这里插入图片描述
在这里插入图片描述
同样还能接着查青岛市有多少区 pid=370200
在这里插入图片描述
刚刚是用了两步查出来的,那么能不能用一个步骤就能查出来?

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

在这里插入图片描述
山东省改为青岛市:
在这里插入图片描述
在这里插入图片描述

--子查询    一个查询中 嵌套另一个查询
		-- 标量子查询
				--查询出最高的男生信息
				select * from students where height=(select max(height) from students);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值