原創(chuàng)|使用教程|編輯:龔雪|2014-05-15 09:10:10.000|閱讀 2548 次
概述:本文介紹了MapInfo Professional入門(mén)過(guò)程中的空間查詢與地理分析教程,上半部分先為大家介紹地理數(shù)據(jù)的選擇與查詢方法。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
相關(guān)鏈接:
1)關(guān)于selection
盡管MapInfo Professional可通過(guò)表形式允許將數(shù)據(jù)附屬到地圖對(duì)象中去,這時(shí)可進(jìn)行標(biāo)注等操作,但其真正的強(qiáng)大之處在于對(duì)數(shù)據(jù)分析能力體現(xiàn)在其分和組織的能力上。在數(shù)據(jù)分解為邏輯群組之后,即可基于一個(gè)或多個(gè)變量來(lái)進(jìn)行分析。
MapInfo Professional可以從數(shù)據(jù)中檢索信息或是單獨(dú)的記錄。我們將以此方式檢索的一條或多條記錄稱(chēng)為選中部分。選中部分是基于一個(gè)或多個(gè)變量收集的數(shù)據(jù)的子集。
1.選中部分的特征
選中部分是臨時(shí)表。在作出選擇之后,MapInfo Professional創(chuàng)建臨時(shí)表(稱(chēng)為選中部分)來(lái)存儲(chǔ)已選記錄。
2.使用這一選中部分表,可以執(zhí)行眾多可對(duì)永久(基礎(chǔ))表執(zhí)行的任務(wù),例如:
要將選中部分轉(zhuǎn)換為永久列,可在文件菜單上單擊另存副本為。在將臨時(shí)選中部分表另存為永久表之后,可將新表當(dāng)做任意其他表一樣處理。
選中部分表完全取決于創(chuàng)建其所源自的表。如果關(guān)閉基礎(chǔ)表,所有關(guān)聯(lián)的選中部分表均將刪除。
3.選中部分命令和工具說(shuō)明
MapInfo Professional提供了眾多命令和工具用于作出選擇。這些命令和工具可分為兩類(lèi):
2)屏幕選擇
要從屏幕選擇對(duì)象,則包含對(duì)象所需的圖層必須為可選。要令圖層可選,可在地圖菜單上,單擊圖層控制,然后選擇用于該圖層的“可選”復(fù)選框。
在可選圖層中選擇地圖對(duì)象時(shí),MapInfo Professional使用在“參數(shù)設(shè)置”對(duì)話框(選項(xiàng)菜單)的“突出顯示控制”部分定義的設(shè)置突出顯示對(duì)象。在可編輯圖層中選擇地圖對(duì)象時(shí),MapInfo Professional將在所選對(duì)象的范圍中放置編輯句柄(小方框)。
如果地圖窗口中有多個(gè)可選圖層,MapInfo Professional將從最頂部的可選圖層選擇對(duì)象。
例如,現(xiàn)有國(guó)界可選圖層和州界可選圖層。如果國(guó)界位于地圖窗口最頂部的圖層中,則MapInfo Professional將從國(guó)家圖層選擇對(duì)象。如果州界位于地圖窗口最頂部的圖層中,則MapInfo Professional將從州圖層選擇對(duì)象。在使用選擇工具時(shí),MapInfo Professional還將為最頂部的可選圖層顯示信息提示。將光標(biāo)置于對(duì)象之上時(shí),信息提示將顯示對(duì)象的標(biāo)注表達(dá)式。在地圖窗口的參數(shù)設(shè)置中,可以關(guān)閉信息提示(在選項(xiàng)菜單,指向參數(shù)設(shè)置然后單擊地圖窗口)。與此類(lèi)似,如果執(zhí)行邊界搜索,要搜索的邊界對(duì)象應(yīng)該位于最頂部圖層之中。
例如,假設(shè)有一個(gè)州界圖層和一個(gè)郵政編碼邊界圖層。如果要選擇郵編邊界中的所有對(duì)象,郵編圖層應(yīng)該是最頂部的邊界圖層。如果要選擇給定州內(nèi)的所有對(duì)象,州圖層應(yīng)該是最頂部的邊界圖層。通過(guò)選擇地圖菜單,單擊圖層控制,可以重排圖層。
在選擇對(duì)象時(shí)按住CTRL鍵,即可從最頂部表之外的其他表選擇對(duì)象。
例如,假定有三個(gè)可選圖層分別是STATES、COUNTIES和CITIES。如果要在STATES表選擇對(duì)象,但該表是地圖窗口中最低部的圖層,可執(zhí)行以下操作:
1、按住CTRL鍵,然后使用選擇工具單擊地圖?,F(xiàn)在即位于第二個(gè)圖層中。
2、按住CTRL鍵,然后再使用選擇工具單擊地圖?,F(xiàn)在即可從第三個(gè)圖層STATES圖層中選擇對(duì)象。
3)查詢選擇
查詢是針對(duì)數(shù)據(jù)庫(kù)提出的收集信息的數(shù)學(xué)問(wèn)題。在MapInfo Professional中的“查詢”菜單下有兩個(gè)查詢構(gòu)建器,即“選擇”和“SQL選擇”。確定受到機(jī)場(chǎng)噪音污染的居民的SQL查詢。
如果采用選擇,可以對(duì)單獨(dú)表提出問(wèn)題。
如果采用SQL選擇,則可以針對(duì)一個(gè)或多個(gè)信息表來(lái)詢問(wèn)問(wèn)題并執(zhí)行以下任務(wù):
創(chuàng)建表達(dá)式
要執(zhí)行Select查詢,必須創(chuàng)建表達(dá)式。表達(dá)式是一個(gè)用于詢問(wèn)問(wèn)題的邏輯語(yǔ)句。例如,手頭有一個(gè)出租公寓表。如果要?jiǎng)?chuàng)建所有總成本少于$800的所有公寓的臨時(shí)表,可使用以下表達(dá)式:
其中RENT是包含月租的數(shù)字列的列名。
MapInfo Professional搜索公寓表中滿足此條件的所有記錄,并將相應(yīng)記錄置于臨時(shí)表中,該臨時(shí)表可用于制地圖、瀏覽、制統(tǒng)計(jì)圖或執(zhí)行附加查詢。
此外還可以對(duì)數(shù)據(jù)執(zhí)行數(shù)學(xué)運(yùn)算。例如,要?jiǎng)?chuàng)建總成本低于$800的所有公寓的臨時(shí)表??偝杀镜扔谠伦夂兔吭鹿觅M(fèi)用的總和。
可使用以下表達(dá)式:
令MapInfo Professional將RENT列中的數(shù)字和UTILITIES列中數(shù)字加在一起,然后將該和與數(shù)字800比較。
創(chuàng)建表達(dá)式可以采用兩種方式。第一種方式是直接鍵入表達(dá)式。在創(chuàng)建較為簡(jiǎn)單的表達(dá)式之后,此方法通常比較快。第二種方法是在“選擇”對(duì)話框中按下輔助按鈕,然后使用“表達(dá)式”對(duì)話框中的彈出式列表構(gòu)建表達(dá)式。這一方法在學(xué)習(xí)構(gòu)建表達(dá)式和構(gòu)建復(fù)雜表達(dá)式的時(shí)候尤為實(shí)用。
“表達(dá)式”對(duì)話框提供了三個(gè)下拉列表幫助您構(gòu)建表達(dá)式。列、操作數(shù)和函數(shù)。
列
此彈出式列表列出從中進(jìn)行選擇的表中的各列。如果該表包含自此前查詢的派生的列,則這些列也將列出。
操作數(shù)
這一彈出式列表包含數(shù)學(xué)和邏輯操作符號(hào)。此彈出式列表的數(shù)學(xué)操作數(shù)包括加、減、乘、除、大于、小于和等號(hào)。使用這些符號(hào)可用于創(chuàng)建數(shù)學(xué)公式。
例如,要從銷(xiāo)售代表的表中選擇平均毛銷(xiāo)售額大于$2000每月的銷(xiāo)售代表。毛銷(xiāo)售額是通過(guò)將銷(xiāo)售額和傭金加在一起得到的總和。表中現(xiàn)在有兩列:TOTAL_SALES是每個(gè)銷(xiāo)售代表的年銷(xiāo)售額,COMMISSION是每個(gè)銷(xiāo)售代表的年傭金。此時(shí)可構(gòu)建以下表達(dá)式:
此表達(dá)式令MapInfo Professional將TOTAL_SALES列中的數(shù)字和COMMISSION列中的數(shù)字加在一起。但是,這只提供了當(dāng)年的毛銷(xiāo)售額。我們要得到是每月平均的毛銷(xiāo)售額。因此,我們將該總和除以12,以便提供月平均值。隨后將該數(shù)字與2000相比較。
操作數(shù)彈出式列表還包括邏輯操作數(shù)聯(lián)接AND、NOT、OR和LIKE。操作數(shù)LIKE可以和以下兩個(gè)統(tǒng)配符一起使用:“%”和“_”。“%”字符可匹配0個(gè)或更多個(gè)字符_”字符只能匹配一個(gè)字符。
函數(shù)
這一彈出式列表包含多個(gè)數(shù)學(xué)函數(shù),可采用一個(gè)或多個(gè)參數(shù)并返回值。使用函數(shù)可對(duì)列中的數(shù)據(jù)執(zhí)行基本數(shù)學(xué)函數(shù)。例如:
例如,一個(gè)氣象學(xué)者要選擇其所在城市中,溫度和全國(guó)平均值相差大于10度的所有天數(shù)。在其表中有一個(gè)AVG_DIFF列,其中包含了全國(guó)平均值和城市平均值之間的差值。此時(shí)可構(gòu)建以下表達(dá)式:
此表達(dá)式令MapInfo Professional選擇平均差異小于-10或大于+10的所有記錄。但是,她還創(chuàng)建了以下表達(dá)式:
此表達(dá)式令MapInfo Professional選擇平均差異的絕對(duì)值大于10的所有記錄。
函數(shù)彈出式列表包含眾多其他函數(shù),其中包括面積、周長(zhǎng)、正弦和余弦和日期相關(guān)的函數(shù)。有關(guān)這些函數(shù)的完全列表,請(qǐng)參閱“創(chuàng)建表達(dá)式”。
檢驗(yàn)
此按鈕檢查創(chuàng)建的表達(dá)式,并檢驗(yàn)其是否有效。如果是編寫(xiě)表達(dá)式的新手,這一功能尤為實(shí)用。
4)Select查詢
通常使用Select選擇對(duì)象的過(guò)程如下:
1、在查詢菜單上,單擊選擇,以顯示“選擇”對(duì)話框。
2、要查看已選記錄的列表,可選中“瀏覽結(jié)果”復(fù)選框。
3、MapInfo Professional將創(chuàng)建新的選擇表的瀏覽窗口。
MapInfo Professional將該表命名為Query1。下一個(gè)臨時(shí)選擇表將命名為Query2。您可以替代MapInfo Professional的缺省名稱(chēng),并未選中部分提供含義明確的名稱(chēng)。在“存結(jié)果于表中”對(duì)話框中鍵入新名稱(chēng)。使用“另存副本為”將該表另存為單獨(dú)的表。
使用文件子集創(chuàng)建新表
與MapInfo Professional一起使用的眾多數(shù)據(jù)集均包含多于項(xiàng)目所需的對(duì)象和信息。在眾多情況下,均可和完整數(shù)據(jù)產(chǎn)品的子集一起方便地使用。例如,如果正在通過(guò)人口普查數(shù)據(jù)來(lái)跟蹤特定國(guó)家的犯罪統(tǒng)計(jì)信息,則將不需要整個(gè)國(guó)家的人口普查數(shù)據(jù)。您可以只提取該國(guó)家的人口普查數(shù)據(jù)。
此處有兩種方式來(lái)創(chuàng)建一個(gè)新表,來(lái)在其中包含現(xiàn)有文件中的記錄子集。您可以通過(guò)交互方式選擇表示要使用選擇工具置于新表中的記錄的對(duì)象?;蛘咭部墒褂肧QL Select命令來(lái)基于SQL函數(shù)選擇對(duì)象的子集。
無(wú)論是采用交互式方式選擇還是使用SQL選擇語(yǔ)句進(jìn)行選擇,保存生成的表的是同一過(guò)程。
注:后續(xù)內(nèi)容中的眾多查詢均可使用SQL SELECT命令或通過(guò)較為簡(jiǎn)單的選擇命令來(lái)完成。因?yàn)镾QL SELECT功能更加強(qiáng)大,用途更廣,所以在以下示例中使用“SQL選擇”對(duì)話框。
5)SQL查詢
選中部分是表中數(shù)據(jù)行的子集,是基于表中一列或多列選擇的。選中部分是通過(guò)采用有關(guān)數(shù)據(jù)的公式化問(wèn)題(即查詢)來(lái)創(chuàng)建的。愛(ài)達(dá)荷州有多少客戶?哪一警區(qū)的暴力犯罪率最高?MapInfo Professional將這些問(wèn)題的結(jié)果存儲(chǔ)在名為查詢表的臨時(shí)列中。
在本章的第一部分,我們介紹了作為使用查詢選擇命令獲取的結(jié)果的選中部分和查詢表。我們現(xiàn)在將關(guān)注MapInfo Professional中功能強(qiáng)大和實(shí)用的特性使用SQL選擇查詢。如果需要使用MapInfo Professional的選擇命令來(lái)創(chuàng)建復(fù)雜的查詢,SQL選擇將更適合完成相應(yīng)任務(wù)。由選擇命令生成的查詢表中的記錄包含的所有信息均屬于基礎(chǔ)表的記錄中包含的信息。事實(shí)上,兩者是相同的記錄。這些記錄是通過(guò)特定方式安排在一起的,以便于查看。使用SQL SELECT,可以創(chuàng)建包含只隱含在基礎(chǔ)表中的信息的查詢表。
“SQL選擇”對(duì)話框是MapInfo Professional中最出色的對(duì)話框之一。但是也不能盲目。在了解了各個(gè)對(duì)話框的功用之后,創(chuàng)建功能強(qiáng)大的選擇語(yǔ)句就會(huì)變得相當(dāng)簡(jiǎn)單。相應(yīng)語(yǔ)句既可直接鍵入到對(duì)話框中,也可以使用右側(cè)的彈出式菜單來(lái)將具體項(xiàng)目輸入到對(duì)話框中。
說(shuō)明對(duì)話框最便捷的方式是逐步了解以下示例。本例使用MapInfo Professional中包含的WORLD表中的數(shù)據(jù),以便于使用SQL SELECT自行練習(xí)。在各個(gè)步驟中,我們已經(jīng)提供了 對(duì)話框各個(gè)組成部分的簡(jiǎn)介。示例之后提供了每個(gè)對(duì)話框的完全說(shuō)明。
示例1 - 使用面積計(jì)算人口密度
在本例中,我們將使用世界地圖來(lái)創(chuàng)建人口密度超過(guò)500人/平方英里的所有國(guó)家的表。以下公式將計(jì)算人口密度。
在WORLD表中包含一個(gè)人口列(pop_1994),其中沒(méi)有包括國(guó)家面積列。但是,由于WORLD表中具有和記錄關(guān)聯(lián)的圖形對(duì)象,因此MapInfo Professional即可計(jì)算每個(gè)國(guó)家的總面積。
打開(kāi)WORLD.tab表,單擊窗口的最大化按鈕來(lái)將其顯示最大化。在查詢菜單上,單擊SQL選擇,以顯示“SQL選擇”對(duì)話框。
要填寫(xiě)“SQL選擇”對(duì)話框,可執(zhí)行以下操作:
1、在“從表”對(duì)話框中,從“表”下拉列表中選擇WORLD。在一個(gè)SQL語(yǔ)句中可指定多個(gè)表。本示例只使用了一個(gè)表WORLD。
2、在填寫(xiě)“選擇列”框之前,應(yīng)該先填寫(xiě)“從表”框。MapInfo Professional將使用“從表”框中的表來(lái)生成“列”下拉列表中的列的列表。
3、將光標(biāo)置入“選擇列”框,然后刪除星號(hào)(*)。在本示例中,我們將指定要納入到生成的查詢表中的列的列表,而不是納入全部列。
注:“選擇列”框中的星號(hào)(*)表示缺省查詢所有列。
切記查詢表是MapInfo Professional創(chuàng)建用于存儲(chǔ)查詢結(jié)果的臨時(shí)表。
4、從“列”下拉列表中選擇COUNTRY。
5、從“列”下拉列表中選擇POP_1994。
現(xiàn)在我們需要計(jì)算人口密度。切記人口密度是通過(guò)人口除以面積計(jì)算的。在表中沒(méi)有Area列。但是此處提供了一個(gè)函數(shù)Area,可用于計(jì)算任意可地圖化的對(duì)象的面積。由于WORLD表可地圖化,MapInfo Professional可計(jì)算每個(gè)國(guó)家的面積,因此可以計(jì)算每個(gè)國(guó)家的人口密度。
6、從操作數(shù)列表中選擇除號(hào)(/)。
7、從“函數(shù)”彈出式列表中選擇AREA。
這將創(chuàng)建派生列。派生列是包含針對(duì)其他一列或多列執(zhí)行的計(jì)算結(jié)果的列。在MapInfo Professional創(chuàng)建查詢表時(shí),將包含以下兩列:COUNTRY列POP_1994/AREA(OBJ,“SQ MI”)列,即人口密度列。MapInfo Professional對(duì)于所有地理函數(shù)而言都包括一個(gè)單位語(yǔ)句。如果要MapInfo Professional返回采用平方公里為單位的面積,則需要將“sq mi”更改為“sq km”現(xiàn)在,我們需要構(gòu)建表達(dá)式來(lái)只選擇人口密度大于500人/平方英里的國(guó)家。
8、使用Tab鍵轉(zhuǎn)至“條件”框,然后從“列”下拉列表中選擇POP_1994。
9、從操作數(shù)下拉列表中選擇除號(hào)(/)。
10、從“函數(shù)”彈出式列表中選擇AREA。
11、從操作數(shù)下拉列表中選擇大于號(hào)(>)。
12、鍵入數(shù)字500。
現(xiàn)在即創(chuàng)建了用于“選擇人口密度(pop_1994/Area(obj,“sq mi”))大于(>)500人/平方英里的所有國(guó)家”的表達(dá)式。
13、將“按列分組”框留為空。
14、使用Tab鍵轉(zhuǎn)至“按列排序”框,然后從“列”列表選擇COUNTRY。
“按列排序”框可用于指定查詢表顯示記錄的順序。通過(guò)選擇Country列,MapInfo Professional將根據(jù)國(guó)家名稱(chēng)來(lái)按照字母順序列出記錄。
15、使用Tab鍵轉(zhuǎn)至“結(jié)果放入表”,然后鍵入DENSITY。
缺省情況下,MapInfo Professional將該查詢表命名為Query1。后續(xù)的查詢表將依次命名為Query2、Query3等。在“結(jié)果放入表”框中,可以通過(guò)鍵入新表名來(lái)更改查詢表的名稱(chēng)。MapInfo Professional將查詢表命名為DENSITY。
16、單擊檢驗(yàn)。
MapInfo Professional將檢查SQL語(yǔ)句的語(yǔ)法。如果語(yǔ)句中存在任意錯(cuò)誤,MapInfo Professional將提供錯(cuò)誤消息,提示是什么錯(cuò)誤和包含錯(cuò)誤的框。
17、選中“瀏覽結(jié)果”復(fù)選框以創(chuàng)建查詢表的瀏覽窗口。如果不選擇“瀏覽結(jié)果”,MapInfo Professional仍將創(chuàng)建臨時(shí)查詢表,但是不會(huì)顯示該表。如果要在此后顯示表,可在“窗口”菜單中選擇“瀏覽”選項(xiàng),然后從下拉列表中選擇DENSITY。
18、單擊確定以創(chuàng)建下表。
第一列包含國(guó)家名稱(chēng)。第二列包含人口密度。請(qǐng)注意國(guó)家是按照字母順序(OrderBy:Country)列出的,且每個(gè)列出的國(guó)家的人口密度大于500人/平方英里(pop_1994/Area(obj,“sq mi”)>500).
示例2 - 使用SQL計(jì)算人口密度
要設(shè)置SQL SELECT語(yǔ)句,來(lái)選擇具有較高人口密度的國(guó)家,可執(zhí)行以下操作:
1、在文件菜單上,單擊打開(kāi)表,然后在地圖窗口打開(kāi)STATES表。
2、在查詢菜單上,單擊SQL選擇,以顯示“SQL選擇”對(duì)話框。
這將創(chuàng)建新表HIDENSTY,其中只包含了具有相對(duì)較高人口密度(人口除以總面積)的國(guó)家選擇列”框中的星號(hào)(*)將STATES表中的所有列傳輸?shù)紿IDENSTY表。
3、打開(kāi)文件菜單,單擊另存副本為,然后保存選中部分表。該表可使用任意文件名保存。
保存查詢
使用選擇或SQL選擇命令創(chuàng)建的任意查詢可以另存為MapInfo Professional查詢表。查詢表由.tab文件和.QRY文件構(gòu)成。在執(zhí)行選擇或SQL選擇語(yǔ)句之后,在文件菜單上,單擊保存查詢以將查詢保存為表。打開(kāi)此表之后,查詢所基于的表將再次打開(kāi),查詢將再次執(zhí)行。
注:站隊(duì)其他查詢創(chuàng)建的查詢不能保存為表,也不能保存到工作空間之中。
將查詢保存到工作空間
查詢還可保存到工作空間之中。打開(kāi)包含查詢的工作空間時(shí),查詢將執(zhí)行,此時(shí)由查詢創(chuàng)建的任意窗口將重新顯示。和將查詢保存為表不同的是,在將查詢保存到工作空間時(shí),并未創(chuàng)建單獨(dú)的.tab文件。
注:要將查詢保存到工作空間,則必須在啟動(dòng)參數(shù)設(shè)置中選中“在工作空間中保存查詢”。MapInfo Professional缺省為選擇此復(fù)選框。
使用模板進(jìn)行查詢
查詢模板可用于將Select或SQL SELECT語(yǔ)句保存為模板和將其再次載入。這樣每次要使用查詢時(shí),即無(wú)需重新構(gòu)建查詢選擇”和“SQL選擇”對(duì)話框中均提供了“載入模板”和“保存模板”選項(xiàng),可用于更加輕松地完成上述操作。對(duì)于使用原始查詢中的表的更新版本來(lái)重建查詢而言,或者對(duì)于具有和創(chuàng)建查詢語(yǔ)句所基于的表中字段相同的表執(zhí)行查詢而言,查詢模板非常實(shí)用。
保存模板
在編寫(xiě)完Select或SQL SELECT查詢之后,可將查詢另存為模板。要將查詢保存為模板,可執(zhí)行以下操作:
1、在“選擇”或“SQL選擇”對(duì)話框中,可單擊保存模板按鈕來(lái)將查詢保存到模板 或查詢文件。此時(shí)將顯示“將對(duì)話框內(nèi)容存入查詢文件中”對(duì)話框。
2、為查詢文件提供名稱(chēng)、選擇文件夾,然后單擊保存。查詢文件將使用.QRY擴(kuò)展名 保存,并保存在目錄參數(shù)設(shè)置中指定的目錄總。
注:查詢保存模板時(shí),無(wú)需完整或具備正確語(yǔ)法。
載入模板
您可以載入任意保存的查詢模板。
要載入查詢模板,請(qǐng)執(zhí)行以下操作:
1、在“選擇”或“SQL選擇”對(duì)話框中,單擊載入模板按鈕。此時(shí)將顯示“從查詢 文件中載入對(duì)話框內(nèi)容”對(duì)話框。其中列出了.QRY文件。
2、選擇要使用的.QRY文件,然后單擊打開(kāi)選擇”或“SQL選擇”對(duì)話框中將顯示 源自已經(jīng)載入的模板的值。此時(shí)只需執(zhí)行查詢來(lái)創(chuàng)建查詢?yōu)g覽窗口。
派生列
派生列是查詢表中的列,其內(nèi)容是通過(guò)將表達(dá)式應(yīng)用于某些基礎(chǔ)表中現(xiàn)有的列值來(lái)創(chuàng)建的。在上例中,人口密度是派生列。
缺省情況下,“選擇列”框包含一個(gè)星號(hào)(*),該星號(hào)表示將基礎(chǔ)表中的所有列均包含在查詢表中。如果無(wú)需所有列,可刪除該星號(hào),然后只列出要使用的列。
您可以創(chuàng)建多個(gè)派生列。創(chuàng)建派生列的數(shù)量不限。請(qǐng)注意創(chuàng)建的派生列越多,MapInfo Professional執(zhí)行查詢的時(shí)間就越長(zhǎng)。
此外還可以基于以下聚集函數(shù)來(lái)創(chuàng)建派生列:count、sum、avg、wtavg、max和min。
例如:
創(chuàng)建列別名
MapInfo Professional創(chuàng)建派生列時(shí),將使用表達(dá)式本身作為該派生列的名稱(chēng)。該名稱(chēng)有可能不便記憶。但是您可以為列指定別名。
例如,DENSITY瀏覽窗口中的人口密度列的標(biāo)題將為:
我們可以重命名該列,以便其含義更加明確。要重命名列,可在列示相應(yīng)的列時(shí)向“選擇列”框添加新的名稱(chēng)。該別名必須在表達(dá)式之后。并且必須用空格和表達(dá)式分隔開(kāi)來(lái),并且包含在引號(hào)之內(nèi)。例如:
在MapInfo Professional創(chuàng)建臨時(shí)查詢表時(shí),人口密度列將重命名為POP_DENSITY。您可以使用別名來(lái)重命名表中的任意列,而不只限于派生列。例如,如果表中的每個(gè)國(guó)家是貴公司的單獨(dú)的銷(xiāo)售區(qū),則可能將Country列重命名為“TERRITORY”。操作過(guò)程相同:
示例3 - 計(jì)算全世界人口密度
在本例中,我們展示了若干SQL選擇特性:
本例中,現(xiàn)有一個(gè)全球人口統(tǒng)計(jì)數(shù)據(jù)表(WORLD)。要?jiǎng)?chuàng)建一個(gè)表來(lái)顯示全球的人口密度。
使用以下公式:
如果WORLD表沒(méi)有總?cè)丝诨蚩偯娣e列,我們可以通過(guò)對(duì)Population列應(yīng)用sum()聚集函數(shù)和Area函數(shù)來(lái)派生這兩個(gè)列。我們將在第一個(gè)查詢中來(lái)完成這一點(diǎn)。
1、打開(kāi)WORLD表,將其顯示最大化。
2、在查詢菜單上,單擊SQL選擇。此時(shí)將顯示“SQL選擇”的對(duì)話框。
3、從“SQL選擇”對(duì)話框,可執(zhí)行以下操作:
4、單擊檢驗(yàn)。單擊確定。
5、選中“瀏覽結(jié)果”復(fù)選框。
6、單擊確定。
此時(shí)MapInfo Professional生成包含兩列、名為T(mén)OT_POP_AREA的查詢表。第一列顯示人口的總計(jì)值,第二列顯示總面積的返回值。
現(xiàn)在我們得到總?cè)丝诤涂偯娣e,通過(guò)針對(duì)剛剛創(chuàng)建的TOT_POP_AREA表執(zhí)行SQL選擇,還可以計(jì)算世界的人口密度。在該“SQL選擇”中,將用總?cè)丝诔钥偯娣e。
1、在查詢菜單上,單擊SQL選擇可顯示“SQL選擇”對(duì)話框。
2、按照以下方法填充該對(duì)話框:
請(qǐng)注意,選擇Total_Pop之后,COL1將顯示在“選擇列”字段中。這是該字段的列編號(hào)。選擇來(lái)自上一個(gè)查詢的派生列之后,MapInfo Professional使用列編號(hào),而不是列名??梢园疵Q(chēng)或編號(hào)引用列,其中編號(hào)指定“選擇列”框中列的顯示順序。COL1和COL2分別是指第一列和第二列。
3、從操作數(shù)下拉列表中選擇除號(hào)(/)。
4、從列下拉列表中選擇TOTAL_AREA。COL2將顯示在“選擇列”字段中。
5、將“條件”、“按列分組”和“按列排序”留為空白。
6、標(biāo)記“將結(jié)果放入表”框中,然后鍵入WORLD_DENSITY,將此作為該表的名稱(chēng)。
7、單擊檢驗(yàn)。單擊確定。
8、選中“瀏覽結(jié)果”復(fù)選框。
9、單擊確定。
MapInfo Professional生成名為WORLD_DENSITY的查詢表,該表將返回全世界的人口密度值,即每平方英里的人數(shù)。
聚合數(shù)據(jù)
聚合數(shù)據(jù)之后,可以針對(duì)表中所有列的所有列值執(zhí)行數(shù)學(xué)計(jì)算。與只用于執(zhí)行數(shù)學(xué)函數(shù)或單獨(dú)記錄的“選擇”命令不同,SQL用于聚合(或匯總)整個(gè)記錄的數(shù)據(jù)。
MapInfo Professional查找指定列中唯一的數(shù)據(jù)值集,并為每個(gè)這樣的唯一數(shù)據(jù)值集創(chuàng)建一。聚合數(shù)據(jù)之后,需要指定以下內(nèi)容:
例如,您擁有包含銷(xiāo)售代表和其前三個(gè)月銷(xiāo)售業(yè)績(jī)的表:
SALES_REP |
月份 |
銷(xiāo)售額 |
John |
五月 |
1200 |
Cathy |
五月 |
900 |
Julie |
五月 |
1100 |
John |
六月 |
900 |
Cathy |
六月 |
1400 |
Julie |
六月 |
600 |
John |
七月 |
1200 |
Cathy |
七月 |
700 |
Julie |
七月 |
1000 |
通過(guò)在“SQL選擇”對(duì)話框中指定以下各項(xiàng),MapInfo Professional還可以計(jì)算每個(gè)銷(xiāo)售代表的總銷(xiāo)售額:
SALES_REP |
sum(SALES) |
John |
3300 |
Cathy |
3000 |
Julie |
2700 |
或者M(jìn)apInfo Professional可以計(jì)算每個(gè)銷(xiāo)售代表的平均銷(xiāo)售額:
SALES_REP |
avg(SALES) |
John |
1100 |
Cathy |
1000 |
Julie |
900 |
或者M(jìn)apInfo Professional可以計(jì)算每個(gè)月的總銷(xiāo)售額:
月份 |
sum(SALES) |
五月 |
3200 |
六月 |
2900 |
七月 |
2900 |
MapInfo Professional擁有六個(gè)聚合函數(shù):
組合和排序數(shù)據(jù)
可以通過(guò)特定的列將SQL查詢進(jìn)行分組,以便將包含相同值的所有行組合在一起。在“SQL選擇”對(duì)話框的“按列分組”框中指定此列。與聚合函數(shù)結(jié)合使用時(shí),將所有組合列中帶有相同值的行視為一個(gè)組。將禁用重復(fù)的行,并且將基于聚合函數(shù)向派生列報(bào)告聚合值。按照在“選擇列”框中列出的名稱(chēng)或位置指定列。使用派生列時(shí),必須指定列編號(hào)。
沿著相同的行,可以告訴MapInfo Professional以某種方式排列查詢結(jié)果的順序。缺省情況下,MapInfo Professional將按照升序值(即按照字符字段的字母順序)排列記錄的順序。
列出多列之后,MapInfo Professional將從第一列開(kāi)始排列記錄的順序。在第一個(gè)“按列排序”中具有相同值的記錄是按照第二個(gè)“按列排序”中的值進(jìn)行排序。與上述Group By子句相同,使用列名或位置編號(hào)。對(duì)于派生列,使用編號(hào)。對(duì)于位置編號(hào)不要使用“col”。
使用“SQL選擇”連接表
對(duì)多個(gè)表執(zhí)行“SQL選擇”操作時(shí),MapInfo Professional需要連接各種表中記錄的信息。地圖表只包含圖形對(duì)象及其名稱(chēng),以及一些地理區(qū)域的統(tǒng)計(jì)數(shù)據(jù)的表。您希望顯示地圖表上的統(tǒng)計(jì)數(shù)據(jù)。那么可以使用“SQL選擇”來(lái)創(chuàng)建一個(gè)查詢表,其中在一個(gè)表中連接統(tǒng)計(jì)數(shù)據(jù)和地圖數(shù)據(jù)。
使用多個(gè)表時(shí),必須在條件中置入一個(gè)語(yǔ)句,以告訴MapInfo Professional如何匹配不同表中的行。
例如,WORLD表包含國(guó)家及按照國(guó)家劃分的經(jīng)濟(jì)統(tǒng)計(jì)數(shù)據(jù)(Eco_Stats)的表。要?jiǎng)?chuàng)建包含這兩個(gè)數(shù)據(jù)集的查詢表:
要匹配的兩列不必同名。例如,現(xiàn)有包含銷(xiāo)售區(qū)域列(TERRITORY)的國(guó)際客戶(Int_Cust)表。此列包含大陸名稱(chēng),因?yàn)楣臼前凑沾箨憚澐咒N(xiāo)售區(qū)域的。如果要臨時(shí)連接兩個(gè)表:
示例:按大陸計(jì)算的總?cè)丝诤兔娣e
指定MapInfo Professional可以聚合數(shù)據(jù),那么可以計(jì)算世界中每個(gè)大陸的總?cè)丝诤涂偯娣e。要?jiǎng)?chuàng)建帶有以下信息的表:
要?jiǎng)?chuàng)建捕獲此數(shù)據(jù)的表:
1、打開(kāi)WORLD.TAB表,然后通過(guò)單擊最大化按鈕將其最大化顯示。
2、在查詢菜單上,單擊SQL選擇可顯示“SQL選擇”對(duì)話框,并執(zhí)行以下操作:
3、在“從表”框中,從表下拉列表中選擇WORLD。
4、在“選擇列”框中,從列下拉列表中選擇大陸,然后從聚合下拉列表中選擇 COUNT(*)。
按空格鍵一次,然后輸入列別名“COUNTRIES”,將此作為列別名。切記,必須用空格鍵將別名與其表達(dá)式分隔開(kāi)。
注:大陸Count(*)列將在結(jié)果表中顯示為COUNTRIES。
5、從聚合下拉列表選擇SUM。
6、從列下拉列表中選擇POPULATION。選擇Population之后,光標(biāo)將位于結(jié)束括號(hào)[)]的內(nèi)部。使用右箭頭鍵將其移到外部。
注:Sum(Population)創(chuàng)建一個(gè)將計(jì)算世界總?cè)丝诘呐缮小?/p>
7、按空格鍵一次,然后輸入列別名“Total_Pop”。Sum(Population)列將在結(jié)果列表中顯示為T(mén)otal_Pop。
8、從聚合下拉列表選擇SUM。
9、從函數(shù)下拉列表選擇AREA。選擇Area之后,光標(biāo)將位于結(jié)束括號(hào)[)]的內(nèi)部。使用右箭頭鍵將其移到外部。
Sum(Area)創(chuàng)建一個(gè)將計(jì)算總面積的派生列。
10、按空格鍵一次,然后輸入列別名“Total_Area”。
注:Sum(Area(obj,“sq mi”))列將在結(jié)果表中顯示為T(mén)otal_Area。
11、在“按列分組”框中,從列下拉列表中選擇CONTINENT。
12、在“按列排序”框中,從列下拉列表中選擇CONTINENT。
13、在“結(jié)果放入表”框中,輸入POPULATION,以此作為該表的名稱(chēng)。
14、Count(*)計(jì)算表中的所有記錄。然而,因?yàn)槭前凑沾箨懡M合國(guó)家的,MapInfo Professional報(bào)告每個(gè)大陸中的國(guó)家數(shù),并將其放在名為COUNTRIES(別名)的列中。
下圖顯示了結(jié)果查詢表。
使用條件
在連接時(shí)使用的字段順序沒(méi)有什么必然聯(lián)系??梢越邮芤韵抡Z(yǔ)法之一:
Select * from A,B where A.field1 = B.field1
Select * from A,B where B.field1 = A.field1
然而,切記在交換地理操作數(shù)的順序后,地理運(yùn)算符也要隨之發(fā)生變化。以下語(yǔ)句將生成相同的結(jié)果:
Select * from states, cities where states.obj contains cities.obj
Select * from states, cities where cities.obj within states.obj
子句的順序
連接子句的順序與執(zhí)行順序沒(méi)有必然聯(lián)系。例如,以下都是有效子句:
Select * from Us_custg,States,City_125
where States.state = City_125.state and States.state = Us_custg.state
and Us_custg.order_amt > 10000
Select * from Us_custg,States,City_125
where States.state = City_125.state and States.state = City_125.state
and Us_custg.order_amt > 10000
Select * from Us_custg,States,City_125
where Us_custg.state = States.state and Us_custg.order_amt > 10000 and
States.state = City_125.state
錯(cuò)誤處理
如果檢測(cè)到將OR作為邏輯運(yùn)算符的條件無(wú)效,那么MapInfo Professional將指出發(fā)生錯(cuò)誤。通常只要MapInfo Professional找不到兩個(gè)表之間進(jìn)行的連接,就會(huì)顯示此錯(cuò)誤。例如,如果指定以下錯(cuò)誤條件:
Select * from A,B where A.field1 = B.field1 or A.field1 = B.field2
將顯示以下錯(cuò)誤消息:
A和B之間沒(méi)有指定的連接。Where子句中的連接條件無(wú)效
執(zhí)行外連接
SQL外連接是指將較大表中的數(shù)據(jù)與較小表中的數(shù)據(jù)連接起來(lái)的過(guò)程,其中結(jié)果是在較大表中與較小表中匹配的記錄相連接的所有記錄。如果將此連接作為標(biāo)準(zhǔn)連接執(zhí)行,那么將出現(xiàn)問(wèn)題SQL選擇”中的標(biāo)準(zhǔn)連接將生成只有匹配記錄的表。您可能擁有沒(méi)有匹配項(xiàng)的空字段。
例如,假設(shè)表包含建筑物中所有單元的列表。此外還有包含每個(gè)住戶記錄的表。每個(gè)表中都具有帶有單元編號(hào)的字段。您的任務(wù)是生成包含所有單元及每個(gè)單元住戶的表。一些單元將是空閑的,并且與住戶字段沒(méi)有匹配。
第一步是創(chuàng)建可以將單元與住戶成功匹配的數(shù)據(jù)子集。
1、在查詢菜單上,單擊SQL選擇。設(shè)置以下SQL查詢:
2、單擊確定。選擇內(nèi)容將顯示在查詢?yōu)g覽窗口中。將此查詢保存到基礎(chǔ)表中。
3、在文件菜單上,單擊另存副本為。此時(shí)將顯示“另存副本為”對(duì)話框。為文件選擇適當(dāng)?shù)哪夸?,并將其命名為RESULT.tab。單擊保存。
4、在文件菜單上,單擊打開(kāi)表,然后打開(kāi)RESULT表。此表包括存在匹配的兩個(gè)表中的所有記錄。
5、從APARTMNTS表中選擇與住房表中的記錄不匹配的記錄。在查詢菜單上,單擊SQL選擇,然后設(shè)置以下SQL查詢:
結(jié)果查詢表是不在RESULT表中的所有單元的列表。要將這些記錄包含在RESULT表中,必須進(jìn)行附加。
6、在表菜單上,單擊在表中添加行。將最后的查詢表附加到RESULT表中。此操作將空閑單元的列表附加到入住單元的列表中。
使用Instr函數(shù)來(lái)查找數(shù)據(jù)
InStr函數(shù)用于查找較大字符串中的子字符串。此函數(shù)適用于搜索字符字段,以查找特定字符或字符組的位置。其還用于查找子字符串的出現(xiàn)情況。
例如,要選擇POINTS表中的所有街道,該表在STREET列中包含單詞“Main”,那么按照以下方式設(shè)置“SQL選擇”語(yǔ)句:
在上面的示例中,如果InStr函數(shù)在Points表的STREET列中的任意位置找到單詞“Main”,那么其將返回大于零的值(搜索字符串中“Main”第一個(gè)字母的位置)。
INSTR函數(shù)的語(yǔ)法如下:
其中:
例如,要在給定的文本字符串中查找單詞“test”的位置,那么InStr函數(shù)的外觀如下:INSTR(1,”This is a test of the Instr function “,”test”)
執(zhí)行此語(yǔ)句之后,將返回值11。
注:如果搜索的字符串在較大的字符串中不存在,那么將返回值0。
從未嵌套在另一個(gè)表中的表選擇記錄
以下SQL語(yǔ)句用于基于兩個(gè)表共用的字段從未嵌套在另一個(gè)表中的表選擇記錄。例如,如果現(xiàn)有一張表STATE1,并且要從不在CITY125中的STATE1選擇所有記錄。
1、在查詢菜單上,單擊SQL選擇。
注:相應(yīng)的語(yǔ)句語(yǔ)法如下所示:NOT columnname IN (SELECT columnname FROM secondtable)
2、此SQL語(yǔ)句生成在CITY125.tab中不存在的表STATE1.tab中所有記錄的查詢。
從表中選擇偶數(shù)記錄或奇數(shù)記錄
表中的每個(gè)記錄都擁有一個(gè)連續(xù)的記錄編號(hào)或RowID。假設(shè)要從表中選擇其他記錄。最便捷的方式是通過(guò)RowID檢查表。
要選擇具有偶數(shù)記錄數(shù)的記錄,請(qǐng)執(zhí)行以下操作:
1、在查詢菜單上,單擊SQL選擇。
2、在“SQL選擇”對(duì)話框中作出適當(dāng)選擇。
注:RowID是一個(gè)函數(shù),不是Soils表中的列名。
3、要選擇具有奇數(shù)記錄數(shù)的記錄,則在查詢菜單上,單擊SQL選擇。
4、在“SQL選擇”對(duì)話框中作出適當(dāng)選擇。
注:RowID是一個(gè)函數(shù),不是Soils表中的列名。
5、單擊確定。
查找列中的重復(fù)值
數(shù)據(jù)通常由很多不同的用戶輸入到表中。有時(shí)數(shù)據(jù)是重復(fù)的,或者在幾條不同的記錄中存在共用的信息。本節(jié)解釋了如何查找表的給定列中與其他行共享值的所有行。通過(guò)執(zhí)行兩個(gè)SQL選擇語(yǔ)句即可完成。
第一個(gè)SQL選擇語(yǔ)句生成帶有兩列的查詢表。第一列是數(shù)據(jù)列中所有唯一值的列表,第二列列出每個(gè)唯一值發(fā)生的次數(shù)。第二個(gè)SQL語(yǔ)句將每個(gè)數(shù)據(jù)列值與計(jì)數(shù)大于1的查詢表中的所有行進(jìn)行比較。
在下一個(gè)示例中,表EMPLOYEE擁有兩列,即Id_Num和Name。要查找重復(fù)值,應(yīng)執(zhí)行兩個(gè)SQL選擇,修改所指的位置。
1、在查詢菜單上,單擊SQL選擇可填充“SQL選擇”對(duì)話框。
將數(shù)據(jù)列的名稱(chēng)替代為ID_Num,表名稱(chēng)替代為EMPLOYEE。“按列分組”框中的編號(hào)1將按照ID_Num(第一列)將行分組按列排序”中的2 Desc將基于count(*)字段中的值(第二列)按照降序排列記錄。
此SQL選擇語(yǔ)句返回帶有兩列的查詢表。第一列包含至少由一個(gè)員工持有的每個(gè)身份證號(hào)。第二列包含擁有身份證的員工人數(shù)。將按照擁有ID編號(hào)(例如,計(jì)數(shù))的員工人數(shù)對(duì)行進(jìn)行排序。
2、在查詢菜單上,單擊SQL選擇,然后填充該對(duì)話框。
此外,將EMPLOYEE更改為表的名稱(chēng),將ID_Num更改為數(shù)據(jù)列的名稱(chēng)。
在此示例中,SQL語(yǔ)句返回一個(gè)查詢表,該表包含EMPLOYEE中帶有重復(fù)數(shù)據(jù)列值的所有行。條件從EMPLOYEE選擇所擁有的身份證號(hào)與Count_By_ID查詢表中ID編號(hào)之一相同的所有行。此子選擇查找出現(xiàn)多次的所有身份證號(hào)。
計(jì)算與固定點(diǎn)的距離
在MapInfo Professional中,可以計(jì)算從一個(gè)點(diǎn)到另一個(gè)點(diǎn)的距離。本示例顯示如何計(jì)算從固定點(diǎn)到地理編碼的表中的每個(gè)點(diǎn)的距離,并將結(jié)果存儲(chǔ)在另一個(gè)表中。
1、確定固定點(diǎn)的位置。要在地圖上查找符號(hào)的位置,用選擇工具雙擊符號(hào)。在本示例中,X值是-101.697209,Y值36.050036。
2、在查詢菜單上,單擊SQL選擇,然后填充“SQL選擇”對(duì)話框,將X和Y的值替換為上述值。與在上一個(gè)SQL查詢一樣,用表的名稱(chēng)替換EMPLOYEE,并用表中相關(guān)列的名稱(chēng)替換ID_Num。
3、單擊確定。結(jié)果查詢表包含姓和名稱(chēng),以及名為DISTANCE的新列,該列記錄固定位置(-101.697209,36.050036)和與表中各行關(guān)聯(lián)的點(diǎn)之間的距離。
4、要將結(jié)果保存在永久性表中,在文件菜單上,單擊將副本另存為,然后保存。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都控件網(wǎng)