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