结构化查询语言在森林资源动态监测中的使用

2019-07-30 07:10孙天旭
山东林业科技 2019年3期
关键词:语句林地森林资源

刘 政,王 丽,张 鹏,孙天旭,张 芬

(山东省林业监测规划院,山东济南250014)

为掌握林地及林木资源的空间分布,管理属性现状及消长变化情况,保持林地及林木资源数据的真实性、准确性和时效性,建立了山东省森林资源动态监测系统。 在监测系统数据库基础上,根据国家林草局的数据上报要求,将山东省的资源数据转换为国家局要求的标准,完成国家林业和草原局要求的数据统计汇总并提报, 或根据其他部门需求,对资源数据进行统计汇总。 通过实现森林资源动态监测,可随时掌握山东省森林资源空间分布变化情况和林分基本信息,为研究森林资源变化规律和森林空间分布格局等研究工作提供基础数据。 山东省森林资源监测系统数据库主要利用ArcGIS 软件以及Oracle 数据库软件进行基础数据的管理,并通过ArcGIS 或者Access 软件,利用结构化查询语言可实现对数据库信息的查询、更新。

1 结构化查询语言

在森林资源动态监测系统中,作为基础数据库数据来源的重要编辑软件ArcGIS 的个人地理数据库,就是MDB 格式的,是可在Microsoft Access 数据文件中存储和管理的ArcGIS 地理数据库的原始数据格式。 ArcGIS 个人地理数据库MDB,支持空间数据存储, 支持标准化结构化查询语言查询数据,是桌面关系型数据库,最大2G 数据大小。

结构化查询语言Structured Query Language,简称SQL,是一种ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言。专用于关系数据库的程序设计语言,用于数据的存取、查询、更新以及管理关系数据库系统。 面向数据库执行查询;可从数据库取回数据;可在数据库中插入新的记录;可更新数据库中的数据;可从数据库删除记录;可创建新数据库;可在数据库中创建新表;可在数据库中创建存储过程;可在数据库中创建视图; 可以设置表、 存储过程和视图的权限。SQL 语言共分为四大类:数据查询语言DQL、数据操纵语言DML、数据定义语言DDL、数据控制语言DCL。DQL 数据查询语句,用于从数据库中的一个或多个表中查询指定的数据, 查询数据的SELECT 语句。DML 数据操作语句,用于修改数据库中的数据,包括: 将数据插入到一个表中的INSERT 语句; 更新表中已有数据的UPDATE 语句;删除表中数据的DELETE 语句;DDL 数据定义语言,用于创建、修改、和删除数据库内的结构。 创建和删除数据库的CREATE DATABASE 和DROP DATABASE 语句;创建、 修改、 重命名、 删除表的CREATE TABLE、ALTER TABLE、RENAME TABLE、DROP TABLE 语句; 创建和删除索引的CREATE INDEX 和DROP INDEX 语句;DCL 数据控制语句, 用于控制对数据库的访问,包括:用户授予访问权限GRANT 语句;上 面 的 SELECT、UPDATE、DELETE、INSERT、CREATE、DROP 等,都是关键字。

2 在林业数据中的使用

山东省森林资源动态监测以县为基本调查单位,利用近期遥感影像,通过室内小班区划、外业实地调查核实,查清各县森林、林木和林地资源的种类、数量、质量与分布,将林地及森林资源“一张图”数据进行每年更新,并及时更新数据库,为全省社会经济发展考核、 领导干部自然资源资产离任审计、自然资源资产负债表编制等工作提供及时准确的基础数据,为全省建设项目使用林地行政许可和林地保护行政执法、生态公寓林保护管理等提供执法依据, 为各级政府和林业主管部门科学决策、规范管理提供重要支撑。

全省森林动态资源监测涉及200 多万个小班,想要查找某个小班属性或者某种类别的小班属性,如果只依靠传统的方式进行小班数据的浏览查找,费时费力,效率很低。 为了更有效的查找小班数据资源, 以森林资源动态监测小班数据为例, 利用Database 软件,使用SQL 语言中的SELECE 语句进行小班数据查询。在命令输入窗口输入SQL 的查询语句进行数据库记录查询。

SELECT * FROM SDZY_XBM_A t

WHERE t.DI_LEI=”111”

查询(SELECT)语句,SELECT 查询;* 通配符,代表所有数据;FROM 从;SDZY_XBM_A 表名;从SDZY_XBM_A 中查询所有数据;t 表的别名、 简称,用于指代表该表。 WHERE 条件,t.DI_LEI 上述表中DI_LEI 这一列,=”111”等于111,双引号是表示这个111 是字符串; 从SDZY_XBM_A 中查询地类等于111 的所有数据。

WHERE t.MIAN_JI BETWEEN 0 AND 1

BETWEEN x AND xx 指数值条件的范围,上面就是面积在0hm2和1hm2之间的小班。 也可以写成WHERE t.MIAN_JI>0 AND t.MIAN_JI<1, 当然也可以加NOT WHERE 就是不在这个范围。

SELECT TOP 10 * FROM SDZY_XBM_A t

WHERE t.DI_LEI=”111”

ORDER BY t.MIAN_JI

TOP n 前n 条记录,n 是数字,ORDER BY 排序。

SELECT MIN(t.MIAN_JI) AS 最小面积,MAX(t.MIAN_JI) AS 最大面积 FROM SDZY_XBM_A t

AS 别名,这样查询结果的列名就会是该名称。

LEFT(t.DI_LEI,1)=”2”,条件:地类左边第一个字符等于 “2”, 也就是说是非林地。 MIN 最小值,MAX 最大值。

SELECT DISTINCT t.DI_LEI FROM SDZY_XB M_A t

DISTINCT 去重,去除重复值,可以快速去除列的重复值。

SELECT COUNT (1),SUM (t.MIAN_JI) FROM SDZY_XBM_A t

WHERE t.DI_LEI=”111”

COUNT (1) 指计算数量合计,SUM(t.MIAN_JI):SUM 是合计, 括号内是合计的列名。 从SDZY_XBM_A 中查询地类等于111 的小班数量和面积合计(图一),ROUND(xxxx,2),对数值进行四舍五入,2 指小数位数保留2 位(图二)。

图一

图二

WHEREt.DI_LEI = ”111”AND(t.YOU_SHI_SZ=”888” OR t.YOU_SHI_SZ=”666” )

AND 条件,并且,OR 条件,或者。 上面就是地类等于111,同时优势树种等于888 或者666。

WHERE t.DI_LEI=”111” AND t.YOU_SHI_SZ IN (“666”,”777”,”888”)

当同一个条件,要等于的条件很多,可以使用“IN”,来达到目的。 同样“IN”是批量等于,那么“NOT IN”就是批量不等于。

SELECT t.xiang AS 乡代码,COUNT(1) AS 小班数,ROUND (SUM (t.MIAN_JI),2) AS 面积 FROM SDZY_XBM_A t

WHERE t.DI_LEI=”111”

GROUP BY t.xiang

t.xiang AS 乡代码, 添加查询列;GROUP BY t.xiang 分组条件列,以乡来分组,汇总各乡的地类为纯林的小班数和面积。

SELECT t.xiang AS 乡代码, (SELECT u.UNIT_NAME FROM SDZY_QH_XIANG_A u WHERE u.UNIT_CODE=t.xiang )AS 乡代码

在SDZY_QH_XIANG_A 这个表中查询乡名称,把乡代码转换成乡名称。

GROUP BY t.xiang,t.SEN_LIN_LB

新增t.SEN_LIN_LB 为分组条件

GROUP BY t.xiang,LEFT(t.SEN_LIN_LB,1)

LEFT(xxxx,1)从左开始取1 位,把11、12 合并为1,把21、22 合并为2,即是说分出公益林和商品林。

ORDER BY t.xiang DESC

ORDER BY 排序,DESC 不加这个,是升序,加这个关键字就是降序。

另外, 如果存在模糊查询可以使用LIKE 语句进行查找, 例如:WHERE t.SHU_ZHONG_ZC LIKE“%苹果%”,LIKE 模糊查询,语句中就是匹配有“苹果”2 个字的小班。

HAVING ROUND(SUM(t.MIAN_JI),2)>10000

HAVING 这里可以对结果加以过滤, 上面的过滤,就是合计的面积大于10000hm2。 注意:WHERE和HAVING 是一样的意思,但是WHERE 是分组合并之前执行,HAVING 是分组合。

一段完整的查询代码如下:

SELECT t.xiang AS 乡代码,(SELECT u.UNIT_NAME FROM SDZY_QH_XIANG_A u WHERE u.UNIT_CODE =t.xiang) AS 乡 代 码 ,LEFT (t.SEN_LIN_LB,1) AS 森林类别,COUNT(1) AS 小班数,ROUND(SUM(t.MIAN_JI),2) AS 面积

FROM SDZY_XBM_A t

WHERE t.DI_LEI=”111”

GROUP BY t.xiang,LEFT(t.SEN_LIN_LB,1)

ORDER BY t.xiang DESC

运行结果如下图三:

图三

通过SQL 语言的使用可以查询出地类为111,森林类别为11/12/21/22 的小班数量和合计面积,按照乡名称统计。

3 结论

通过SQL 语句的使用,可以根据调查或者数据使用的需要,快速查找森林资源动态监测系统数据库中各种属性的小班数据,实现数据的汇总、分类,为有效合理地利用监测成果以及实现林业数据化提供了便利有效的工具。

猜你喜欢
语句林地森林资源
森林保护和森林资源开发利用研究
森林资源保护管理中存在问题及对策探讨
重点:语句衔接
图片新闻
保护好森林资源 让林区青山常在
明水县林地资源现状及动态变化浅析
浅谈明水县林地资源动态变化状况
新形势下北方森林资源保护探讨
我喜欢
林地流转模式的选择机理及其政策启示