劉 政,王 麗,張 鵬,孫天旭,張 芬
(山東省林業(yè)監(jiān)測規(guī)劃院,山東濟(jì)南250014)
為掌握林地及林木資源的空間分布,管理屬性現(xiàn)狀及消長變化情況,保持林地及林木資源數(shù)據(jù)的真實性、準(zhǔn)確性和時效性,建立了山東省森林資源動態(tài)監(jiān)測系統(tǒng)。 在監(jiān)測系統(tǒng)數(shù)據(jù)庫基礎(chǔ)上,根據(jù)國家林草局的數(shù)據(jù)上報要求,將山東省的資源數(shù)據(jù)轉(zhuǎn)換為國家局要求的標(biāo)準(zhǔn),完成國家林業(yè)和草原局要求的數(shù)據(jù)統(tǒng)計匯總并提報, 或根據(jù)其他部門需求,對資源數(shù)據(jù)進(jìn)行統(tǒng)計匯總。 通過實現(xiàn)森林資源動態(tài)監(jiān)測,可隨時掌握山東省森林資源空間分布變化情況和林分基本信息,為研究森林資源變化規(guī)律和森林空間分布格局等研究工作提供基礎(chǔ)數(shù)據(jù)。 山東省森林資源監(jiān)測系統(tǒng)數(shù)據(jù)庫主要利用ArcGIS 軟件以及Oracle 數(shù)據(jù)庫軟件進(jìn)行基礎(chǔ)數(shù)據(jù)的管理,并通過ArcGIS 或者Access 軟件,利用結(jié)構(gòu)化查詢語言可實現(xiàn)對數(shù)據(jù)庫信息的查詢、更新。
在森林資源動態(tài)監(jiān)測系統(tǒng)中,作為基礎(chǔ)數(shù)據(jù)庫數(shù)據(jù)來源的重要編輯軟件ArcGIS 的個人地理數(shù)據(jù)庫,就是MDB 格式的,是可在Microsoft Access 數(shù)據(jù)文件中存儲和管理的ArcGIS 地理數(shù)據(jù)庫的原始數(shù)據(jù)格式。 ArcGIS 個人地理數(shù)據(jù)庫MDB,支持空間數(shù)據(jù)存儲, 支持標(biāo)準(zhǔn)化結(jié)構(gòu)化查詢語言查詢數(shù)據(jù),是桌面關(guān)系型數(shù)據(jù)庫,最大2G 數(shù)據(jù)大小。
結(jié)構(gòu)化查詢語言Structured Query Language,簡稱SQL,是一種ANSI(American National Standards Institute 美國國家標(biāo)準(zhǔn)化組織)標(biāo)準(zhǔn)的計算機(jī)語言。專用于關(guān)系數(shù)據(jù)庫的程序設(shè)計語言,用于數(shù)據(jù)的存取、查詢、更新以及管理關(guān)系數(shù)據(jù)庫系統(tǒng)。 面向數(shù)據(jù)庫執(zhí)行查詢;可從數(shù)據(jù)庫取回數(shù)據(jù);可在數(shù)據(jù)庫中插入新的記錄;可更新數(shù)據(jù)庫中的數(shù)據(jù);可從數(shù)據(jù)庫刪除記錄;可創(chuàng)建新數(shù)據(jù)庫;可在數(shù)據(jù)庫中創(chuàng)建新表;可在數(shù)據(jù)庫中創(chuàng)建存儲過程;可在數(shù)據(jù)庫中創(chuàng)建視圖; 可以設(shè)置表、 存儲過程和視圖的權(quán)限。SQL 語言共分為四大類:數(shù)據(jù)查詢語言DQL、數(shù)據(jù)操縱語言DML、數(shù)據(jù)定義語言DDL、數(shù)據(jù)控制語言DCL。DQL 數(shù)據(jù)查詢語句,用于從數(shù)據(jù)庫中的一個或多個表中查詢指定的數(shù)據(jù), 查詢數(shù)據(jù)的SELECT 語句。DML 數(shù)據(jù)操作語句,用于修改數(shù)據(jù)庫中的數(shù)據(jù),包括: 將數(shù)據(jù)插入到一個表中的INSERT 語句; 更新表中已有數(shù)據(jù)的UPDATE 語句;刪除表中數(shù)據(jù)的DELETE 語句;DDL 數(shù)據(jù)定義語言,用于創(chuàng)建、修改、和刪除數(shù)據(jù)庫內(nèi)的結(jié)構(gòu)。 創(chuàng)建和刪除數(shù)據(jù)庫的CREATE DATABASE 和DROP DATABASE 語句;創(chuàng)建、 修改、 重命名、 刪除表的CREATE TABLE、ALTER TABLE、RENAME TABLE、DROP TABLE 語句; 創(chuàng)建和刪除索引的CREATE INDEX 和DROP INDEX 語句;DCL 數(shù)據(jù)控制語句, 用于控制對數(shù)據(jù)庫的訪問,包括:用戶授予訪問權(quán)限GRANT 語句;上 面 的 SELECT、UPDATE、DELETE、INSERT、CREATE、DROP 等,都是關(guān)鍵字。
山東省森林資源動態(tài)監(jiān)測以縣為基本調(diào)查單位,利用近期遙感影像,通過室內(nèi)小班區(qū)劃、外業(yè)實地調(diào)查核實,查清各縣森林、林木和林地資源的種類、數(shù)量、質(zhì)量與分布,將林地及森林資源“一張圖”數(shù)據(jù)進(jìn)行每年更新,并及時更新數(shù)據(jù)庫,為全省社會經(jīng)濟(jì)發(fā)展考核、 領(lǐng)導(dǎo)干部自然資源資產(chǎn)離任審計、自然資源資產(chǎn)負(fù)債表編制等工作提供及時準(zhǔn)確的基礎(chǔ)數(shù)據(jù),為全省建設(shè)項目使用林地行政許可和林地保護(hù)行政執(zhí)法、生態(tài)公寓林保護(hù)管理等提供執(zhí)法依據(jù), 為各級政府和林業(yè)主管部門科學(xué)決策、規(guī)范管理提供重要支撐。
全省森林動態(tài)資源監(jiān)測涉及200 多萬個小班,想要查找某個小班屬性或者某種類別的小班屬性,如果只依靠傳統(tǒng)的方式進(jìn)行小班數(shù)據(jù)的瀏覽查找,費時費力,效率很低。 為了更有效的查找小班數(shù)據(jù)資源, 以森林資源動態(tài)監(jiān)測小班數(shù)據(jù)為例, 利用Database 軟件,使用SQL 語言中的SELECE 語句進(jìn)行小班數(shù)據(jù)查詢。在命令輸入窗口輸入SQL 的查詢語句進(jìn)行數(shù)據(jù)庫記錄查詢。
SELECT * FROM SDZY_XBM_A t
WHERE t.DI_LEI=”111”
查詢(SELECT)語句,SELECT 查詢;* 通配符,代表所有數(shù)據(jù);FROM 從;SDZY_XBM_A 表名;從SDZY_XBM_A 中查詢所有數(shù)據(jù);t 表的別名、 簡稱,用于指代表該表。 WHERE 條件,t.DI_LEI 上述表中DI_LEI 這一列,=”111”等于111,雙引號是表示這個111 是字符串; 從SDZY_XBM_A 中查詢地類等于111 的所有數(shù)據(jù)。
WHERE t.MIAN_JI BETWEEN 0 AND 1
BETWEEN x AND xx 指數(shù)值條件的范圍,上面就是面積在0hm2和1hm2之間的小班。 也可以寫成WHERE t.MIAN_JI>0 AND t.MIAN_JI<1, 當(dāng)然也可以加NOT WHERE 就是不在這個范圍。
SELECT TOP 10 * FROM SDZY_XBM_A t
WHERE t.DI_LEI=”111”
ORDER BY t.MIAN_JI
TOP n 前n 條記錄,n 是數(shù)字,ORDER BY 排序。
SELECT MIN(t.MIAN_JI) AS 最小面積,MAX(t.MIAN_JI) AS 最大面積 FROM SDZY_XBM_A t
AS 別名,這樣查詢結(jié)果的列名就會是該名稱。
LEFT(t.DI_LEI,1)=”2”,條件:地類左邊第一個字符等于 “2”, 也就是說是非林地。 MIN 最小值,MAX 最大值。
SELECT DISTINCT t.DI_LEI FROM SDZY_XB M_A t
DISTINCT 去重,去除重復(fù)值,可以快速去除列的重復(fù)值。
SELECT COUNT (1),SUM (t.MIAN_JI) FROM SDZY_XBM_A t
WHERE t.DI_LEI=”111”
COUNT (1) 指計算數(shù)量合計,SUM(t.MIAN_JI):SUM 是合計, 括號內(nèi)是合計的列名。 從SDZY_XBM_A 中查詢地類等于111 的小班數(shù)量和面積合計(圖一),ROUND(xxxx,2),對數(shù)值進(jìn)行四舍五入,2 指小數(shù)位數(shù)保留2 位(圖二)。

圖一

圖二
WHEREt.DI_LEI = ”111”AND(t.YOU_SHI_SZ=”888” OR t.YOU_SHI_SZ=”666” )
AND 條件,并且,OR 條件,或者。 上面就是地類等于111,同時優(yōu)勢樹種等于888 或者666。
WHERE t.DI_LEI=”111” AND t.YOU_SHI_SZ IN (“666”,”777”,”888”)
當(dāng)同一個條件,要等于的條件很多,可以使用“IN”,來達(dá)到目的。 同樣“IN”是批量等于,那么“NOT IN”就是批量不等于。
SELECT t.xiang AS 鄉(xiāng)代碼,COUNT(1) AS 小班數(shù),ROUND (SUM (t.MIAN_JI),2) AS 面積 FROM SDZY_XBM_A t
WHERE t.DI_LEI=”111”
GROUP BY t.xiang
t.xiang AS 鄉(xiāng)代碼, 添加查詢列;GROUP BY t.xiang 分組條件列,以鄉(xiāng)來分組,匯總各鄉(xiāng)的地類為純林的小班數(shù)和面積。
SELECT t.xiang AS 鄉(xiāng)代碼, (SELECT u.UNIT_NAME FROM SDZY_QH_XIANG_A u WHERE u.UNIT_CODE=t.xiang )AS 鄉(xiāng)代碼
在SDZY_QH_XIANG_A 這個表中查詢鄉(xiāng)名稱,把鄉(xiāng)代碼轉(zhuǎn)換成鄉(xiāng)名稱。
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 不加這個,是升序,加這個關(guān)鍵字就是降序。
另外, 如果存在模糊查詢可以使用LIKE 語句進(jìn)行查找, 例如:WHERE t.SHU_ZHONG_ZC LIKE“%蘋果%”,LIKE 模糊查詢,語句中就是匹配有“蘋果”2 個字的小班。
HAVING ROUND(SUM(t.MIAN_JI),2)>10000
HAVING 這里可以對結(jié)果加以過濾, 上面的過濾,就是合計的面積大于10000hm2。 注意:WHERE和HAVING 是一樣的意思,但是WHERE 是分組合并之前執(zhí)行,HAVING 是分組合。
一段完整的查詢代碼如下:
SELECT t.xiang AS 鄉(xiāng)代碼,(SELECT u.UNIT_NAME FROM SDZY_QH_XIANG_A u WHERE u.UNIT_CODE =t.xiang) AS 鄉(xiāng) 代 碼 ,LEFT (t.SEN_LIN_LB,1) AS 森林類別,COUNT(1) AS 小班數(shù),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
運行結(jié)果如下圖三:

圖三
通過SQL 語言的使用可以查詢出地類為111,森林類別為11/12/21/22 的小班數(shù)量和合計面積,按照鄉(xiāng)名稱統(tǒng)計。
通過SQL 語句的使用,可以根據(jù)調(diào)查或者數(shù)據(jù)使用的需要,快速查找森林資源動態(tài)監(jiān)測系統(tǒng)數(shù)據(jù)庫中各種屬性的小班數(shù)據(jù),實現(xiàn)數(shù)據(jù)的匯總、分類,為有效合理地利用監(jiān)測成果以及實現(xiàn)林業(yè)數(shù)據(jù)化提供了便利有效的工具。