版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Mapinfo重點及難點講解(一)
SQL查詢重分區(qū)無縫圖層返回
一、SQL查詢
SQLSelect的一般步驟:
1.打開你要查詢的表。你要查詢的表為基礎(chǔ)表(BaseTable)
2.選擇Query>SQLSelect,填寫SQLSelect對話框滿足你需要的那些分。按擊OK,Mapinfo
進行查詢。
Mapinfo從你的基礎(chǔ)表中抽出數(shù)據(jù),把查詢結(jié)果保存在一個被稱為結(jié)果表的特殊臨時表中。
結(jié)果表僅有滿足你的條件的行和列。結(jié)果表的默認名是Selection(盡管你可以在SQLSelect
對話框的InfoTableNamed位置上指定一個不同的結(jié)果表名)。
注意:以下第三條暗示:結(jié)果表既反映在Browser窗口,也反映在Map窗口中,換句話說,
可收查詢結(jié)果保存為另一-個圖層。保存方法見下面的第5條。
3.如果你要看查詢結(jié)果,打開一個Map窗口或(和)-一個Browser窗口。默認的是Mapinfo
自動以一個Browser窗口顯示結(jié)果表(除非你清除了SQLSelect對話框中的BrowserResults
檢查盒)。
如果你的結(jié)果表被命名為Selection(默認名),Browser窗就顯示一個不同的表名,例如
Query1名Query2。這是因為你瀏覽這個Selection表的瞬間,Mapinfo對該表作了一個“快
拍”,并命名這個快拍為Queryn(n是數(shù)字,1或更大)oMapInfo主要按快拍是因為“Selection”
是一個特殊的表名,每當(dāng)你選擇或不選擇某些行時,Selection都在動態(tài)變化。
在SQLSelect對話框中,你可以為你的結(jié)果表輸入一個另外的名字(例如,你可以命名你
的結(jié)果表為My-Query)。這就阻止了Mapinfo把你的結(jié)果表重命名為Queryn。
4.Mapinfo自動選擇結(jié)果表中全部的行。這樣,在你執(zhí)行了SQLSelect之后,你就能夠接
著執(zhí)行選擇行的全套操作。例如,你可以(通過選擇Option>RegionStyle)對所有被選擇
的行提供另一種充填色,或者你能夠Cut或Copy選擇的全部行。
通常,你對結(jié)果表所作的任何變化都會自動作用于你的原始(基礎(chǔ))表。例如,如果你用S
QLSelect選擇了基礎(chǔ)表中的某些行,然后又從你的結(jié)果表中刪除了部分行,Mapinfo就會從
你的表中刪除相應(yīng)的行。但是,如果你查詢產(chǎn)生了小計(Subtotals),你可以改變這個結(jié)果
表而不影響基礎(chǔ)表。
5.如果你要作一個結(jié)果表的永久備份,選擇File>SaveAs。
如果你你不執(zhí)行SaveAs存盤,該結(jié)果表將在你退出MapInfo時被刪除。
SQLSelect對話框各區(qū)的填寫
SelectColumns區(qū)
(1)利用這個區(qū)來指定在查詢表中將出現(xiàn)哪些列。例如查詢World表,可以指定Select
Columns:Country,Population,Indust_Grwth,如果你要你的結(jié)果表有與你的原表相同的列
組,那就在這個區(qū)輸入一個*號。
如果你要你的結(jié)果有一個與你的原表不同的列組,就要刪去這個*號并輸入由逗號分隔的列名
(如下同)表達式列表.這個區(qū)能夠包括一個*號或者一個列表達式列表,但不能同時包括這
兩種。要在你填SelectColumns區(qū)之前填FromTables區(qū)。
如果你查詢涉及的不止一個有,各個列名之前必須有它的表名,二者之間用西文句號分隔。
因此,如果你要執(zhí)行一個涉及兩個表的查詢,其中之一是Canada表,并且你要查詢包括該表
的Population列,,那么你必須用列表達式Canada.Population。當(dāng)你使用兩個或多個表時,
Columns下拉列表自動把表名插到各個列名之前。
(2)只選擇部分列出現(xiàn)在結(jié)果表中是有用的,特別是你的原表有很多列而你僅需操作其中的少
數(shù)列時(或許因為屏幕上只能同時顯示少數(shù)列)
(3)如何輸入一系列列名:
在FromTables區(qū)輸入一個表名,可用鍵盤打入,也可用鼠標(biāo)從Table下拉列表中選入。
用鼠標(biāo)在SelectColumns區(qū)中按擊,使插入點出現(xiàn)在該區(qū)內(nèi)。
用退格鍵或刪除鍵刪去*號(如果其中有*號),SelectColumns區(qū)能夠包含一個*號或者一串
列名,但不能同時包含這兩種。
從對話框右邊的Colunms下拉列表中選擇一個列名。Mapinfo把這個列名Copy到Select
Columns區(qū)。
如果你的查詢還包括另外一些列名,從下拉列表中選擇另外的一些列名。每當(dāng)你選擇另外的
列名時,Mapinfo自動插入逗號以分隔列名。
(4)計算某些列
SQLSelect能夠計算出列(derivedColumns)并把這些導(dǎo)出列存放到結(jié)果表中。導(dǎo)出列是
Mapinfo在中根據(jù)基礎(chǔ)表中已有的一個或多個列的內(nèi)容計算出的一個特殊的臨時列。
例如,你的表或許含有字段Purchases92或Purchases93(分別代表各顧客在1992和1993
年購物的總金額)。如果你要你的查詢結(jié)果顯示一個TotalPurchases歹!],表示各顧客1992
和1993年合起來的購物金額,你可.以在你的SelectColomns區(qū)內(nèi)包括一個導(dǎo)出列。在這個
例子中,導(dǎo)出列應(yīng)該有這樣的形式:
Purchases92+Purchases93
同樣,你可能有一個包含有字段Fname(代表顧客的第一名)和Lname(顧客的后名)的顧客信
息表。如果你要你的結(jié)果表包括顧客的全名,你也可以在你的SelectColumns區(qū)包括一個導(dǎo)
出列,在這個例子中,導(dǎo)出列會有這樣的形式:
Fname+“"+Lname
為指定一,個導(dǎo)出列,你就要在SelectColumns區(qū)輸入,?個表達式。一個導(dǎo)出列表達式是若干
列名,操作符(例如+和-)和函數(shù)(例如Ucase$函數(shù),它把一個字串轉(zhuǎn)換為大寫的)的一個
組合。
在指定導(dǎo)出列之前,你必須先在FromTable區(qū)輸入一個或多個表名。
如何指定一個導(dǎo)出列表達式
按SelectColumnsE,在該區(qū)出現(xiàn)插入點。
刪除區(qū)內(nèi)的*號
輸入一個列表達式。列表達式應(yīng)該包括一個或多個列名,如果表達式包括一個以上的列名,
這個表達式一般包含操作符(例如+或-)來把多個列組合成為一個導(dǎo)出值。
有許多不同的函數(shù)和操作符能夠用于列表達式中。
如果需要為列表達式指定一個別名。指定別名的方法是:在列表達式后打一個空格,然后再
打入用雙引號括起來的別名。
別名是可選的。如果你給了你的列表達式一個別名,那么,當(dāng)你以Browser窗口顯示結(jié)果表
時別名就會出現(xiàn)在這個列的頂上。如果你沒指定別名,Mapinfo會用表達式的內(nèi)容作為別名
(例如“Fname+Lname")。
如果需要,指定另外的列名或?qū)С隽斜磉_式。如果你輸入另外的列表達式,要輸入逗號以隔
開不同的表達式。
下面的例子顯示一個執(zhí)行加法的導(dǎo)出列表達式,把兩個數(shù)字列的值加起來。這個例子假定
Purchases92和Purchases93均為數(shù)字列:
Purchases92+Purchases93
下一個例子顯示同樣的列表達式,附加上了一個可選的列別名(wNetPurchases"):
Purchases92+Purchases93aNet_PurchasesM
下一個例子顯示一個執(zhí)行除法的導(dǎo)出列表達式,把Poppulagion列的內(nèi)容除以一百萬:
Population/1000000"Millions
下一個例子顯示一個把兩個字串列組合起來的導(dǎo)出列表達式。這個例子假定Fname和Lname
都是字串列:
Fname+""+Lname"Full_name”
當(dāng)列是字串列時,加操作符(+)執(zhí)行字串聯(lián)接而不是數(shù)字相加。因此,表達式Fname+“"+
Lname產(chǎn)生一個由第一名緊跟空格再后跟一名組成的字串。
下一個例子顯示一個導(dǎo)出列表達式怎樣結(jié)合函數(shù)調(diào)用。Proper$函數(shù)操作一個字串值并返回一
個有正常大寫的字串(僅第一字母大寫):
Proper?(Fname+,M,+Lname)"Fun_name”
下一個例子顯示如何用Format$函數(shù)重新格式化數(shù)字列。一般,數(shù)字列都沒有包含逗號,不
幸的是,這使得讀大數(shù)有困難。下面的例子用Format*函數(shù)把逗號插入到Purchases93列中。
這個例子假定Purchases93是,個數(shù)字列:
Format$(Purehases93,n)"Purchases_1993”,字串表達式告訴Foramt$函數(shù)
在列前顯示一個美元($)并在列內(nèi)插入逗號。
下一個例子顯示一個導(dǎo)出列怎樣計算基礎(chǔ)表中各行的地理面積:
Area(0bj,"sqkm")"Net_Area”
Obj是一特殊的列名,代表與表中各行相聯(lián)系的地理對象。
WhereCondition區(qū)
(1)通過行的排列順序聯(lián)接不同的表
如果兩個表沒有一個共同的列,你可以根據(jù)行的順序仍然能夠聯(lián)接這兩個表。如果你知道一
個表的第一行與另一個表的第一行是相對應(yīng)的,并且,一般地說,如果你知道第一個表的第
n行與第二個表的第n行是對應(yīng)的,那么你就可以通過引用一個名叫RowID的特殊列來聯(lián)接
這兩個表。
RowID列含有一個整數(shù)值,代表著表中各行的行號。因此,任何表的第一行都有一個為1的
RowID值,第2行有一個RowID值2,等等。
為了聯(lián)接兩個表,讓Mapinfo一個表的第n行與另一個表的第n行匹配起來,就要指定一個
WhereCondition表達式,形如下:
TABLE_1.RowID=TABLE_2.RowID
(2)從地理上(用地理操作符)聯(lián)接不同的表
當(dāng)兩個表都有圖形對象時,Mapinfo能夠根據(jù)這些對象之間的空間關(guān)系聯(lián)接這兩個表。所以,
即使你的表沒有一個共同的列,你也有可能聯(lián)接不同的表。
地理操作符允許你選擇某些對象,根據(jù)它們與另外的某個對象的空間關(guān)系。MapInfo有一個
與地理操作符一起使用的特殊列名,“Obj”或“Object”。這個列名指的是與你的表相邊系的
圖形對象。
地理操作符要放到所指定的對象之間,地理操作符從操作符(Operators)下拉列表中選取。
下表列出了地理操作符:
Contaions(含有)
ObjectAContainsObjectB
(如果B的形心在A的邊界內(nèi)的某個位置上)
ContaionsEntire(包含全部)
ObjectAContainsEntireObjectB
(如果B的邊界全部在A的邊界內(nèi))
Within(在內(nèi))
ObjectAisWithinObjectB
(如果A的形心在B的邊界內(nèi)側(cè))
EntireWithin(完全在內(nèi))
ObjcteAisEntireWithinObjectB
(如果A的邊界全部在B的邊界內(nèi))
Intersects(相交)
ObjcteAIntersectsObjectB
(如果它們至少有一個共同點或者它們中的一個完全在另一個內(nèi))
Contains與Within的比較是根據(jù)對象的形心,而ContainsEntire與EntireWithin的比
較是根據(jù)整個對象。
如果A包括整個B,那么A肯定包含B,如果A完全在B內(nèi),那么A肯定在B內(nèi)。
Mapinfo執(zhí)行簡單的含有和在內(nèi)比較,比執(zhí)行完全含有和完全在內(nèi)要快。因此,除非你絕對
相信某些對象是完全在另一些對象之內(nèi),否則你應(yīng)該使用Contains和Within而不用
ContainsEntireEntireWithin。
地理操作符提供了一種聯(lián)接表的方法。當(dāng)表中沒有你能建立起聯(lián)接的列時,你可以用地理操
作符(在WhereCondition區(qū)內(nèi))指定聯(lián)接關(guān)系。如果你要執(zhí)行一個涉及一個Cities表和一
個State表的兩表查詢,你可以用如下的表達式之一聯(lián)接兩個表:
Cities.ObjWithinStates.Obj
States.ObjContainsCities.Obj
在任何一種情況下,MapInfo都能找到在各個州內(nèi)的全部城市,然后把代表一個城市的一個
行與含有它的州的行聯(lián)系起來。用同樣的SQL查詢,你也能夠用集合功能來合計每個州的城
市數(shù),或者以州為根據(jù)總結(jié)基于城市的數(shù)據(jù)。
當(dāng)你有Counties表和—"bCustomers表時,Counties是多邊形,Customers是點,你可以
用下列地理表達式之一指一個集合聯(lián)接:
Customer,objWithinCounty.obj
County.objContainsCustomer,obj
地理操作符與Subselects結(jié)合特別有用(見PerfermingSubselects)
(3)聯(lián)接兩個或更多的表(根據(jù)共同字段)
一般,你是把你的資料貯存在幾個不同的表中,你有你自己的數(shù)據(jù)文件,你也可能有從
Mapinfo購買的各種統(tǒng)計資料的數(shù)據(jù)庫。SQL允許你建立關(guān)聯(lián)以便你把這些不同表中的資料接
到一起,成為一個單獨的結(jié)果表。設(shè)想這樣一種情況:你有一個有人口統(tǒng)計交資料的Counties
表(各個County按年齡段、種族和職業(yè)種類的人口數(shù)統(tǒng)計),你還可能有關(guān)于顧客訂單資料
的數(shù)據(jù)庫。你想檢測下這兩個表,看一定種類的訂單是否來自具有一定人口統(tǒng)計特征的
Counties,或許你想根據(jù)訂單與人口的統(tǒng)計特征的組合選擇若干個Counties(縣)。要做到
這一點,你必須能夠聯(lián)接這兩個表。
假設(shè)Counties表含有縣名,同樣訂單表的一個列也含有訂單來源的縣名,這樣,兩個表都有
一個共同的字段,即縣名。Mapinfo能夠用這個共同的字段來聯(lián)接這兩個表。
Countyname1980人口,1990人口Order#CustomerCounty
Foster1980人口,1990人口478001FranicFoster
Williamette1980人口,1990人口478002JamesFoster
Mason1980人口,1990人口478003Wickmason
Counties表Order表
在SQLSelect對話框中,你用WhereCondition區(qū)告訴Mapinfo如何聯(lián)接這兩個表。在這
個區(qū)內(nèi)填寫如下:
SelectColumns:*
FromeTable:Counties,Order
WhereCondition:Counties.Countyname=0rder.county
表名(在FromTables區(qū))的順序是重要的。如果兩個表都含有Map對象,結(jié)果表將只含有
排列在FromTables區(qū)中第一個表的Map對象。另外,當(dāng)查詢完成時,Mapinfo會自動選擇
列在FromTables區(qū)第一個表的部分或全部行。這樣,在前例中,Mapinfo會選擇Counties
表的部分或全部行。其結(jié)果也會包括從Orders表中拷貝來的數(shù)據(jù),但Orders表本身不會被
選擇。
在WhereCondition區(qū)中,列的順序必須與FromTables區(qū)中表的順序相匹配。在上例中,
FromTables區(qū)把Counties表放到了Qoders表之前,因此,WhereCondition區(qū)必須把
Counties.CountiName列放在Orders.County列之前。如果顛倒這兩個表在FromTables區(qū)
內(nèi)的順序,你也必須顛倒在WhereContition區(qū)內(nèi)列名的順序。
當(dāng)你聯(lián)接兩個表時,結(jié)果表的行數(shù)取決兩個匹配的好壞。假定你有一個10000行的Order表,
要把這個0rder表與有50行的States表聯(lián)接。結(jié)果表可.能有10000行之多。但是如果Orders
表中的某些行沒有與States表中的行相匹配。結(jié)果表就會少于10000行。因此,如果Orders
表中有400行無state名(或許由于數(shù)據(jù)輸入錯誤),并且如果這個關(guān)聯(lián)是依賴State名,結(jié)
果表就可能只有9600個行了。
當(dāng)SQLSelect對話框聯(lián)接兩個表時,你指定的如何聯(lián)接這兩個表的子句(Clause(s))必須
放在WhereCondition區(qū)內(nèi)的其它子名之前。
你可以用UpdateColumn來修改SQLSelect多表聯(lián)接的結(jié)果表。當(dāng)你要更新一個表中帶有另
一個表的信息的一個列時,你可以:
用SQLSelect聯(lián)接這兩個表。
針對Selection表使用UpdateColumno
更新會自動影響到相應(yīng)的基礎(chǔ)表。
(4)次選擇(Subselects)
Mapinfo允許SQLSelect中的再次選擇。再選擇是放在SQLSelect對話框WhereCondition
區(qū)內(nèi)里面的一個選擇語句。Mapinfo首先處理Subselects,然后用這個Subselects的結(jié)果去
處理主要的SQLSelecto
例如,假定你要選出1990年人口大于全國各州平均值的全部州。換句話說,如果平均州人口
是5百萬,你要選出所有平均人口大于5百萬的州。在實行中,你要在WhereCondition區(qū)
中使用如下的過濾標(biāo)準(zhǔn):
Pop1990>平均人口
然而,你并不知道那平均值是多少。但是,你知道Mapinfo能夠用如下集合表達式計算出那
個平均值:
Avg(Pop_199)
為了計算平均州人口,要在WhereCondition區(qū)輸入一個再選擇(Subselect)oWhere
Condition區(qū)那時能夠比較對Pop_1990列再選擇的結(jié)果。要進行那樣一種查詢,如下填寫SQL
Select對話框。
SelectColumns:*
FromTable:States
WhereCondition:Pop_1990>(SekectAvg(Pop_1990)FromStates)
再選擇是在WhereCondition區(qū)內(nèi),在》操作符之后。再選擇必須用園括號括起來。
最有用的再選擇包括一個Select子句,一個from子句和一個Where子句,象下面這樣:
Select某些列from某些表where某些條件存在。
考慮如下的SQLSelect,它選擇各州中人口大于4000000的全部城市:
SelectColumns:*
Fromtable:cities
WhereCondition:objwithinany(SelectobjfromstateswherePop」990>4000000)
再選擇返回代表1990年人口大于400000的全部州的地理對象。然后主選擇語句設(shè)到被再選
擇選中了的州內(nèi)全部城市。注意:主選擇語句用了一個地理操作符(Within)來做這個事情。
雖然前一查詢用兩個表,States表和Cities表,但Cities是出現(xiàn)FromTables區(qū)的僅有的
表。這是因為在再選擇中使用了States。如果一個表僅僅是被用于再選擇內(nèi),那么這個表的
表名不需要出現(xiàn)在FromTables區(qū)中。
在下一個例子中,我們選擇與田西納州相交的所有州,換言之,所有相鄰的州。
Selectcolumns:*
Fromtables:states
Whereconditions:objIntersects(selectobjfromstateswhere
state二“TN”
首先,Mapinfo執(zhí)行再選擇:
Selectobjfromstateswherestate二“TN”
再選擇找到了代表田納西州的圖形對象。然后主Wherecondition找到了States表中與代表
田納西州的圖形相交的全部對象。你可以用類似的查詢選擇與某給定街道相交的全部街道。
現(xiàn)考慮這個例子:
Selectcolumns:*
FromTables:County
WhereCondition:County,objcontainsany(selectobjfromdealers)
這個查詢找到含有銷售商的所有縣。主Wherecondition有這樣的一個形式:
一個縣對象Contains一個經(jīng)銷商對象。
經(jīng)銷商對象組是由再選擇:Selectobjfromdealers產(chǎn)生的。Mapinfo選擇代表含有經(jīng)銷商
的各個縣對象的行。
最后,對于再選擇有幾點注意事項:
在再選擇中你可以使用在FromTable區(qū)中未列出的表.但是你必須把這些表列在你的再選擇
的From子句中(如前面例子所示那樣)。
當(dāng)再選擇帶有關(guān)鍵字"any"或“all”時,再選擇必須并且只能返回一個列。下面的句例是
無效的,因為它試圖返回兩個列(State_name和Pop」990):
Any(Selectstate_name,pop1990fromstate)
當(dāng)再選擇不帶“any"、“all”或“in”時,再選擇必須準(zhǔn)確返回一個行的值。下面的例子是
無效的,因為再選擇返回了一組行:
objwithin(SelectobjfromstatewherePop」990>2000000)
當(dāng)再選擇不用"any"、"all"或"in"時,你不能在再選擇中使用GroupbyColumns子句。
你不能有嵌套的再選擇,即是說,每個Select語句你只能有一個再選擇。
設(shè)置過濾標(biāo)準(zhǔn)
一個過濾標(biāo)準(zhǔn)是一個邏輯表達式,它通常把一個列值與某個另外的值作比較。例如,以下的
過濾標(biāo)準(zhǔn)用大于操作符(>)測試訂單金額列是否有大于100的值。
WhereCondition:Order_Amount>100
如果一個查詢包含了上面這個WhereCondition子句,MapInfo就只選擇那些訂單金額值大
于100的行。
WhereCondition區(qū)可以包含兩個或更多的邏輯表達式,但這些表達式必須被詞“And”或“Or”
隔開。如果表達式是用詞And連接,Mapinfo僅選擇那些兩個標(biāo)準(zhǔn)滿足的行。如果表達式是
用Or連接,Mapinfo就選擇滿足其中任何一個標(biāo)準(zhǔn)的行。
過濾標(biāo)準(zhǔn)可用于你的基礎(chǔ)表的任何一個列,不管你是否在SelectColumns區(qū)中包括了這個列。
列可以用列名或列號來引用,列號指明是在SelectColumns中已有的列的順序。
因此,“Col”和氣。16”分別指第一和第六列,號之前必須有字母“Col”。
用SQLSelect對話框的WhereCondition區(qū)的基本目的可能是兩個:行過濾和關(guān)聯(lián)。Where
condition區(qū)服務(wù)于多個目的。在某些場合下,你可能要用一個Wherecondition表達式來
過濾你的表,以便你只看到滿足一定標(biāo)準(zhǔn)的那些列。在一些場合下,你要利用Wherecondition
區(qū)來指定一種關(guān)聯(lián),以便你的查詢能夠包括來自兩個或更多個表中的列。
注意:你不可以在Wherecondition區(qū)中使用集合函數(shù)(apgregatefunction)?
OrderbyColumns(按列排序)區(qū)
選擇升序和降序
默認,Mapinfo是用升序排序一個表。如果你要用一個字符型字段進行排序,升序意味著A
出現(xiàn)在B之上,如此類推。如果你對一個數(shù)字型字段進行排序,小的數(shù)值出現(xiàn)在大的數(shù)值之
上。
為了以降序排序,以便大的數(shù)出現(xiàn)在小的數(shù)之上,要在OrderByColumns區(qū)中的列名之后放
一個詞desc。例如,你查詢World表,用如下的方式:
OrderByColumns:Populationdesc
是用Population對這個表排序,降序。
當(dāng)Mapinfo執(zhí)行多級排序時,各級排序有其自己的升/降序設(shè)置。這樣,下面的例子按State
列執(zhí)行升序,然后按Population列執(zhí)行降序:
SelectColumns:*
FromTable:City_lK
OrderByColumns:State,Populationdesc
在OrderByColumns區(qū)中的列名句法:
在這個區(qū),你有兩種方法輸入一個列名:
輸入列的名字(例如前例中的列名state)
輸入列號,這里的1代表排列在SelectColumns區(qū)中的第一列,在數(shù)字之前不要打入“Col”。
如果你要用一個導(dǎo)出列進行排序并且這個導(dǎo)出列有一個別名的話,你可以在OrderBy
Columns區(qū)輸入這個別名。如果導(dǎo)出列沒有別名,就輸入列號(例如1)。
用OrderByColumns字段對結(jié)果表排序
在SQLSelect對話框中,利用OrderByColumns區(qū),允許你對結(jié)果表的行進行排序。排序
影響到出現(xiàn)在Browser窗口中和各個行從頂?shù)降壮霈F(xiàn)的順序。如果你打算把Browser窗口作
為一報告打印出來,你可能要對你的結(jié)果表進行排序。
OrderByColumns區(qū)是可選的,如果你留下這個區(qū)空著,結(jié)果表就不被排序。如果你在這在
區(qū)輸入一個列名,Mapinfo就根據(jù)那個列的內(nèi)容對結(jié)果表進行排序。
實現(xiàn)多級排序
在OrderByColumns指明多級排序的列名要用逗號隔開。依次為第一級、第二級…
GroupByColumns區(qū)(按列分組)建立小計用
用GroupByColumns區(qū)小計結(jié)果表
SQLSelect對話框中GroupByColumns區(qū)是可選的。如果你在這個區(qū)輸入一個或多個列名,
結(jié)果表將含有這個表的小計(Subtotals),或集合信息。
注意:結(jié)果表變成了小計表,沒原始數(shù)據(jù),小計的依據(jù)是列值相同者。
當(dāng)你指定一個GroupByColumns值時,Mapinfo查詢所指定的列,看那個列的那些行有相同
的值。因此,結(jié)果你有一個顧客數(shù)據(jù)庫,并且你是按StateName列分組,Mapinfo就會把所
有California的顧客放列到另一個組,如此等等。Mapinfo然后計算各組的集合信息(總合,
均值等)。
為指定小計標(biāo)準(zhǔn):
1.在GroupByColumns區(qū),輸入Mapinfo將用來計算小計的列名或列號
例如:
如果你要在各個州的基礎(chǔ)上合計你的顧客表,輸入表示顧客所在的州的列名(例如
StateName)到GroupByColumns區(qū)
2.輸入同樣的列名(例如StateName)到SelectColumns區(qū)。
3.在SelectColumns區(qū)輸入一個或多個集合操作符(Sum,Count,Avg,Min,或Max)。記住,
要用逗號分隔這些集合操作符。
輸入表達式Count(*)。在SelectColumns區(qū))
如果你要計算各州的全部銷售(Sales)合計,輸入如Sum(Sales)之類的表達式。(這里的
Sales是列名)。
在SelectColumns區(qū)中,那些非集合函數(shù)基礎(chǔ)的所有列還必須在GroupByColumns區(qū)列出。
這些是Maplnf。為了確定分組要檢測的列。這些列具有獨特數(shù)據(jù)值的每一個組在查詢表中有
一個單獨的行。導(dǎo)出列應(yīng)該用表示相對位置的編號指定,“1”、“2”、“5”分別代表第一、第
二和第五列。
例如:
SelectColumns:Month(sickdate),count(*)
FromToltes:sickdays
GroupByColumns:1
這個查詢告訴MapInfo,計算每一個有記錄的全部行數(shù)并生成一個按月分組的查詢表。結(jié)果
表第月有一行,那個行有一個表示有多少人在那月生病的列。
在GroupByColumns區(qū),你應(yīng)該按列名或列編號來引用列(1代表列在SelectColumns區(qū)
的第一個列)。當(dāng)你不使用聯(lián)接時,你可以用正規(guī)的字段名。當(dāng)你用導(dǎo)出列的值分組時,或者
如果你聯(lián)接兩個表時,你必須用列號代替列名。按號引用列時,數(shù)字前不要加“Col”字樣。
你可以輸入一個以上的列到GroupByColumns區(qū)。Mapinfo首先按你列出的第一個列來對行
進行分組,在那些組中,MapInfo再按第二個列進行再分組,以此類推。對于各個結(jié)果行,
查詢表都含有基于集合函數(shù)的全部列的集合值。
(這里有一個問題,每一個結(jié)果行只能是一個集合函據(jù)的結(jié)果嗎?可否不同的列執(zhí)行不同的
集合函數(shù)?)
注:在SelectColumns區(qū)中,那些基于集合函數(shù)的列不能列入GroupByColumns區(qū)內(nèi)。但
是,SelectColumns區(qū)中那些不是基于集合函數(shù)的每一個列應(yīng)該列入GroupByColumns區(qū)
內(nèi)。
GroupByColumns的例子(按列分組的例子)
設(shè)想你有一顧客訂單表。表中的各個行代表一分單獨的訂單。表中有一個列含有接受訂單的
銷售代表的名字,另一個列含有顧客的名字,再有一個列含有訂單金額(Amount).
對每個銷售代表,你想找出:
那個銷售代表接受的訂單數(shù)量
那個代表登錄的訂單平均金額
那個代表填寫的訂單的總金額
如下的SQLSelect查詢產(chǎn)生所要求的結(jié)果:
SelectColumns:Sales_Rep,count(*),average(Amount),sum(Average)
Fromtables:Order
GroupByColumns:Seles_Rep(這意味著按銷售代表統(tǒng)計)
注意:GroupByColumns區(qū)和SelectColumns區(qū)的三個集合操作符。Mapinfo要做的是:
1.找出對應(yīng)某一個銷售代表的全部行
2.計算行數(shù):Count(*)
3.計算這個銷售代表的定單的平均金額:Avg(Amount)
4.計算這個銷售代表的定單的總金額:Sum(Amount)
Mapinfo對每一個銷售代表都要做這些工作,然后產(chǎn)生一個對每一個代表有一個單獨行的結(jié)
果表。
集合操作符(Count,Avg和Sum)小計有相同銷售代表值的全部行的數(shù)據(jù)值。
考慮這樣一個SQLSelect:
Selectcolumns:Customer,Count(*),Avg(Amount),Sum(Amount)
Fromtables:Orders
GroupByColumns:Customer
這是一個在體質(zhì)上與前一個相同的查詢,除了我們現(xiàn)在是按顧客分組而不是按銷售代表分組
外,這個SQLSelect找出訂單Count,Average和Sum是針對各個顧客的而不是銷售代表的。
下面的例子說明按多列分組多重分組
Selectolumns:Sales_Rep,Customer,Count(*),Avg(amount),Sum(Amount)
Fromtables:Orders
GroupByColumns:Sales_Rep,Customer
在GroupByColumns區(qū),我們指定了兩列名,在這種情況下,Mapinfo首先按銷售代表組合
行,然后再按顧客組合。這個查詢的結(jié)果表對應(yīng)于每一個不同的顧客秦銷售代表組合都有一
個行。
當(dāng)某個顧客通過兩個或更多的銷售代表訂貨時,那個顧客與第一個銷售代表做的生意都有一
個行來總結(jié)。全部行首先是按銷售代表分組,然后,對于各個銷售代表,又按顧客分組。
集合函數(shù),Mapinfo有下列集合函數(shù):
Count(*):計算一個組內(nèi)的記錄個數(shù),它僅用*作為其參數(shù)是因為它適用于整個記錄,而不是
記錄中的某個特定字段。
Sum(表達式):計算一個組全部記錄表達式值的總和
Avg(表達式):計算一個組全部記錄表達式值的平均值
Max(表達式):找出一個組全部記錄表達式值中的最大值
Min(表達式):找出一個組全部記錄表達式值中的最大值
以上所述的表達式,最簡單的情況是一個字段名(列名)。
關(guān)于Fromtables
這個區(qū)告訴Maplnf。要查詢那些表,你必須在這個區(qū)最少輸入一個表名。如果你要Maplnf。
查詢兩個或更多的表,就要輸入用逗號分隔的一系列表名。
如果你在這個區(qū)輸入了兩個或兩個以上的表名,那么,你還必須在WhereCondition區(qū)指定
表達式來告訴Mapinfo如何連系這些表。
如果你輸入了兩個表名,MapInfo自動計算一個適當(dāng)?shù)腤hereCondition表達式。但是如果
你用了三個或更多的表名,你必須手工修改這個表達式。當(dāng)你按多表聯(lián)接時,所有的表必須
是基礎(chǔ)表。你不能把結(jié)果表(例如Qurey5)用于多表SQLSelec?
關(guān)于WhereCondition區(qū)
這個區(qū)有不同的任務(wù),取決于你的查詢性質(zhì)。當(dāng)你查詢一個單表時,該區(qū)是可選的(即不填
也可)。如果你查詢涉及到連接兩個或多個表,你必須指定?個WhereCondition表達式,那
個表達式必須表明Mapinfo應(yīng)該如何聯(lián)接這兩個表。
如果你愿意,你可以在該區(qū)輸入過濾標(biāo)準(zhǔn)。輸入過濾標(biāo)準(zhǔn)的方法是打入一個判斷真假的邏輯
表達式。例如,當(dāng)你查詢World表時,如果你只選擇人口大于5百萬的行,就要指定如下的
WhereCondition子句:
WhereCondition:Population>5000000
這個區(qū)的數(shù)字中間不要打逗號。
關(guān)于GroupbyColumns區(qū)
這個區(qū)允許你小計你的結(jié)果表。如果你輸入一個列名(或被逗號分隔的一串列名)到該區(qū),
Mapinfo就小計你的查詢結(jié)果,并且只給你顯示出小計結(jié)果表,而不顯示你的表的每個行。
計算小計是一個兩步曲:
1.輸入一個(或一組)列名到該區(qū)
2.輸入同樣的列名和集合運算器(諸如Sum或Count)到SelectColumns區(qū)。GroupbyColumns
區(qū)是可選的。如果你保留為空(默認的),Mapinfo將不計算小計。
關(guān)于OrderbyColumns區(qū)
這個區(qū)允許你對你的結(jié)果表進行排序。如果你輸入一個(或被逗號分隔的一組)列名到該區(qū),
Maplnf。就以你輸入的列作為關(guān)鍵字對你結(jié)果表的行進行排序。默認是升序,A在B之上,小
數(shù)在大數(shù)之上。降序可在列名后跟一個desc字。例如:
OrderbyColumns:Populationdesc
該區(qū)是可選的,如果空著,結(jié)果表將不排序。
關(guān)于IntotableNamed區(qū)
這個區(qū)允許你命名結(jié)果表。默認的結(jié)果表名是Selection,,如果你要指定一個另外的名字,
就把它打入該區(qū)。你輸入的表名不應(yīng)該是一個打開的表。如果你頻繁使用SQLSelect,并且
如果你用selection作為你的結(jié)果表名,你會以得到許多左上重疊的結(jié)果表(例如
Queryl,Query2,Query3等)告終。這些Queryn表不會造成任何傷害;然而,有的人就是不
喜歡這大量打開的表。如果你要避免這大量打開的Queryn表,那你在該區(qū)輸入一個另外的表
名就行了。例如你輸入表名Qresults:
IntoTableNamed:Qresults
然后再進行的各個SQL操作就只用Qresults作為結(jié)果表名。這個方法,你只能得到一個結(jié)果
表(Qresults),不管你進行了多少次查詢。
關(guān)于BrowseResults
如果你標(biāo)證了BrowseResults檢查框,Mapinfo自動以一個Browser窗口顯示查詢結(jié)果。
關(guān)于Aggregates,Function,Operator等的下拉列表(略)
SQLSelect的目的是什么?
它是一個多目的的查詢工具。用SQL選擇,你可以完成下列任務(wù)之一或全部:
過濾你的數(shù)據(jù),以便你只看到你感興趣的行和列
執(zhí)行關(guān)系連結(jié),把兩個或多個表組合成一個結(jié)果表
創(chuàng)建關(guān)系連結(jié),(根據(jù)已有列的內(nèi)容計算出新值的列)
按數(shù)據(jù)值或(和)字母順序排序你的數(shù)據(jù)
小計你
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- SH市移動電話機買賣合同
- 2024年山東省醫(yī)療應(yīng)急技能競賽理論試題庫大全-下(多選、判斷、填空題)
- 四年級數(shù)學(xué)(簡便運算)計算題專項練習(xí)與答案
- 2024年全國半導(dǎo)體行業(yè)職業(yè)技能競賽(半導(dǎo)體芯片制造工賽項)理論考試題庫(含答案)
- 醫(yī)療衛(wèi)生系統(tǒng)招聘考試護理學(xué)專業(yè)知識模擬17
- 北師大版三年級下冊數(shù)學(xué)第一單元測試卷及答案
- 初三學(xué)科提升攻略模板
- 常用電力電子課程設(shè)計
- 常氏家譜 研究報告
- 【中職專用】備戰(zhàn)中職高考數(shù)學(xué)沖刺模擬卷二答案(重慶適用)
- 《小企業(yè)會計實務(wù)》教學(xué)課件- 小企業(yè)會計實務(wù)
- 手足口病培訓(xùn)課件(ppt)
- 精通版小學(xué)三年級上冊英語期中試卷
- 驗收人員組成表
- 一級精神病醫(yī)院基本標(biāo)準(zhǔn)
- 深圳市生育保險津貼申請表+(范本)
- 我是什么說課稿
- 護士首次注冊體檢表
- 空冷安裝指導(dǎo)1
- 園林綠化苗木價格大全種苗木報價全集
- 90頁木吉他獨奏譜
評論
0/150
提交評論