SQL查询--自关联

自关联

SQL查询--自关联_第1张图片
SQL查询--自关联_第2张图片
问题:

能不能将两个表合成一张表?

思考

观察两张表发现,citys表比provinces表多一个列proid,其他列的类型都是一样的。

意义

存储的都是地区信息,而且每种信息的数据量有限,没必要增加一个新表,或者将来还要存镇信息,都增加新表的开销太大。

答案

定义表areas,结构如下

  • id
  • atitle
  • pid
    SQL查询--自关联_第3张图片
    说明
  • 因为省没有所属的省份,所以可以填写null
  • 城市所属的省份pid,填写省所对应的编号id
  • 这就是自关联,表中的某一列,关联了这个表的另外一列,但是它们的业务逻辑含义是不一样的,城市信息的pid引用的是省信息的id
  • 在这个表中,结构不变,可以添加区县、乡镇街道、村社区等信息

创建areas表的语句

在create table china(
    aid int primary key,
    atitle varchar(20),
    pid int
);

SQL查询--自关联_第4张图片

插入数据

查询

-- 查询所有省
select * from china where pid=0;

SQL查询--自关联_第5张图片

查询省的名称为“山西省“的所有城市
select city.* from china as city inner join china as province on city.pid=province.aid where province.atitle="山西省";

SQL查询--自关联_第6张图片

查询省的名称为“陕西省“的所有城市
select city.* from china as city inner join china as province on city.pid=province.aid where province.atitle="陕西省";

SQL查询--自关联_第7张图片

你可能感兴趣的:(数据库)