设计省信息的表结构provincessql
设计市信息的表结构citysspa
citys表的proid表示城市所属的省,对应着provinces表的id值设计
问题:能不能将两个表合成一张表呢?code
思考:观察两张表发现,citys表比provinces表多一个列proid,其它列的类型都是同样的blog
意义:存储的都是地区信息,并且每种信息的数据量有限,不必增长一个新表,或者未来还要存储区、乡镇信息,都增长新表的开销太大ci
答案:定义表areas,结构以下it
由于省没有所属的省份,因此能够填写为null社区
城市所属的省份pid,填写省所对应的编号idtable
这就是自关联,表中的某一列,关联了这个表中的另一列,可是它们的业务逻辑含义是不同的,城市信息的pid引用的是省信息的idclass
在这个表中,结构不变,能够添加区县、乡镇街道、村社区等信息
建立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='广州市';