区划代码和城乡划分代码的数据
访问地址:http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2021/index.html
前段时间写了一个程序,用来下载区划代码和城乡划分代码的数据,包含省、地级市、区县、镇街道、村社区的信息,是txt格式数据文件,下面是百度网盘的下载地址
链接:https://pan.baidu.com/s/1Aj5aEzwQ49owRLBcNV_vYg?pwd=pgjm
提取码:pgjm
下载解压后的文件
数据下载后如何将txt文件导入数据库,接下来以SqlServer数据库为例,一步步将txt文件数据导入数据库中
一、创建数据库
二、创建数据表,需要建5个表,建表语句如下
创建省份表
--省 直辖市
IF EXISTS(SELECT * FROM sys.objects WHERE name = 't_province')
BEGIN
DROP TABLE t_province
END
CREATE TABLE t_province
(
province_code int primary key, --链接代码,下载数据时用
province_name varchar(20), --名称
link_name varchar(20) --链接地址,下载数据时用
);
创建城市表
--地级市
IF EXISTS(SELECT * FROM sys.objects WHERE name = 't_city')
BEGIN
DROP TABLE t_city
END
CREATE TABLE t_city
(
province_code int, --链接代码,与省份关联
city_code bigint primary key, --市区划代码
city_name varchar(40), --名称
link_name varchar(20), --链接地址,下载数据时用
link_prefix varchar(20), --链接前缀,下载数据时用
row_idx int --父级行序号,下载数据时用
);
创建县级表
--区 县 县级市
IF EXISTS(SELECT * FROM sys.objects WHERE name = 't_county')
BEGIN
DROP TABLE t_county
END
CREATE TABLE t_county
(
city_code bigint,
county_code bigint primary key,
county_name varchar(40),
link_name varchar(20),
link_prefix varchar(20),
row_idx int
);
创建城镇表
--镇 街道
IF EXISTS(SELECT * FROM sys.objects WHERE name = 't_town')
BEGIN
DROP TABLE t_town
END
CREATE TABLE t_town
(
county_code bigint,
town_code bigint primary key,
town_name varchar(60),
link_name varchar(30),
link_prefix varchar(20),
row_idx int
);
创建乡村表
--乡村 社区
IF EXISTS(SELECT * FROM sys.objects WHERE name = 't_village')
BEGIN
DROP TABLE t_village
END
CREATE TABLE t_village
(
town_code bigint, --城镇区划代码
village_code bigint primary key, --乡村区划代码
village_classify_code varchar(3), --城乡分类代码
village_name varchar(60), --名称
link_name varchar(20)
);
三、将txt数据导入数据表中,使用的是Navicat工具连接的SqlServer。依次导入province.txt、city.txt、county.txt、town.txt、village1.txt、village2.txt、village3.txt、village4.txt、village5.txt,下面只演示了province.txt的导入步骤,其它文件的导入步骤都是一样的,只是第3步选择的txt文件不一样和第6步目标表需要手动选择下,其它文件就不展示了。
选中左侧的“表”,点击“导入向导”
选择“文本文件”,点击“下一步”
选择导入的txt文件,下面导入的是省份的txt文件
选择“逗号”,点击“下一步”
点击“下一步”
目标表如果不正确需要手动选择下,点击“下一步”
点击“下一步”
导入模式默认追加,点击“下一步”
点击“开始”
导入完成,点击“关闭”
重复以上步骤完成其它txt文件的导入
需要注意的第6步,目标表选择自己建的表t_city
错误的
正确的
四、在数据库查询数据
单表查询
SELECT * FROM t_province;
SELECT * FROM t_city;
SELECT * FROM t_county;
SELECT * FROM t_town;
SELECT * FROM t_village;
联表查询
--查询 湖北省的地级市
SELECT p.province_name,c.city_code,c.city_name
FROM t_province p INNER JOIN t_city c ON p.province_code = c.province_code
WHERE p.province_name = '湖北省'
--查询 湖北省的区县、县级市
SELECT p.province_name,c.city_code,c.city_name ,c2.county_code,c2.county_name
FROM t_province p
INNER JOIN t_city c ON p.province_code = c.province_code
INNER JOIN t_county c2 ON c.city_code = c2.city_code
WHERE p.province_name = '湖北省'
AND c.city_name = '武汉市'
--查询 湖北省武汉市的城镇、街道
SELECT p.province_name,c.city_code,c.city_name ,c2.county_code,c2.county_name,t.town_code,t.town_name
FROM t_province p
INNER JOIN t_city c ON p.province_code = c.province_code
INNER JOIN t_county c2 ON c.city_code = c2.city_code
INNER JOIN t_town t on c2.county_code = t.county_code
WHERE p.province_name = '湖北省'
AND c.city_name = '武汉市'
--查询 湖北省武汉市的乡村、社区
SELECT p.province_name,c.city_code,c.city_name ,c2.county_code,c2.county_name,t.town_code,t.town_name,v.village_code,v.village_classify_code,v.village_name
FROM t_province p
INNER JOIN t_city c ON p.province_code = c.province_code
INNER JOIN t_county c2 ON c.city_code = c2.city_code
INNER JOIN t_town t on c2.county_code = t.county_code
INNER JOIN t_village v on t.town_code = v.town_code
WHERE p.province_name = '湖北省'
AND c.city_name = '武汉市'
ORDER BY t.town_code