## 自关联
* 设计省信息的表结构provinces
* id
* ptitle
* 设计市信息的表结构citys
* id
* ctitle
* proid
* citys表的proid表示城市所属的省,对应着provinces表的id值
* 问题:能不能将两个表合成一张表呢?
* 思考:观察两张表发现,citys表比provinces表多一个列proid,其它列的类型都是一样的
* 意义:存储的都是地区信息,而且每种信息的数据量有限,没必要增加一个新表,或者将来还要存储区、乡镇信息,都增加新表的开销太大
* 答案:定义表areas,结构如下
* id
* atitle
* pid
* 因为省没有所属的省份,所以可以填写为null
* 城市所属的省份pid,填写省所对应的编号id
* 这就是自关联,表中的某一列,关联了这个表中的另外一列,但是它们的业务逻辑含义是不一样的,城市信息的pid引用的是省信息的id
* 在这个表中,结构不变,可以添加区县、乡镇街道、村社区等信息
* 创建areas表的语句如下:
~~~
create table areas(
id int primary key,
atitle varchar(20),
pid int,
foreign key(pid) references areas(id)
);
~~~
* 从sql文件中导入数据
~~~
source areas.sql;
~~~
* 查询一共有多少个省
* 查询省的名称为“山西省”的所有城市
~~~
select city.* from areas as city
inner join areas as province on city.pid=province.id
where province.atitle='山西省';
~~~
* 查询市的名称为“广州市”的所有区县
~~~
select dis.*,dis2.* from areas as dis
inner join areas as city on city.id=dis.pid
left join areas as dis2 on dis.id=dis2.pid
where city.atitle='广州市';
~~~
- mysql
- 1.创建库和表
- 1.1.数据库简介
- 1.2.安装管理
- 1.3.数据完整性
- 1.4.命令脚本操作
- 2.查询
- 2.1.条件
- 2.2.聚合
- 2.3.分组
- 2.4.排序
- 2.5.分页
- 3.高级
- 3.1.关系
- 3.2.连接
- 3.3.自关联
- 3.4.子查询
- 3.5.内置函数
- 3.6.视图
- 3.7.事务
- 4.与python交互
- 4.1.交互类型
- 4.2.增改删
- 4.3.查询
- 4.4.封装
- 4.5.用户登录
- Nosql简介
- mongodb
- 1.基本操作
- 1.1.环境安装
- 1.2.数据库操作
- 1.3.集合操作
- 1.4.数据类型
- 1.5.数据操作
- 1.6.数据查询
- 1.6.1.Limit与Skip
- 1.6.2.投影
- 1.6.3.排序
- 1.6.4.统计个数
- 1.6.5.消除重复
- 2.高级操作
- 2.1.聚合aggregate
- 2.1.1.$group
- 2.1.2.$match
- 2.1.3.$project
- 2.1.4.$sort
- 2.1.5.$limit,$skip
- 2.1.6.$unwind
- 2.2.安全
- 2.3.复制(副本集)
- 2.4.备份和恢复
- 2.5.与python交互
- redis
- 1.基本配置
- 2.数据操作
- 2.1.string
- 2.2.键命令
- 2.3.hash
- 2.4.list
- 2.5.set
- 2.6.zset
- 4.高级
- 4.1.发布订阅
- 4.2.主从配置
- 5.与python交互
- 6.login登陆完善