MapInfo重点难点讲解_第1页
MapInfo重点难点讲解_第2页
MapInfo重点难点讲解_第3页
MapInfo重点难点讲解_第4页
MapInfo重点难点讲解_第5页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Maplnfo重点难点讲解

一、SQL查询

SQLSelect的一般步骤:

1.打开你要查询的表。你要查询的表为基础表(BaseTable)

2.选择Query>SQLSelect,填写SQLSelect对话框满足你需要的那些分。按击OK,Mapinfo

进行查询。

Mapinfo从你的基础表中抽出数据,把查询结果保存在一-个被称为结果表的特殊临时表中。

结果表仅有满足你的条件的行和列。结果表的默认名是Selection(尽管你可以在SQLSelect

对话框的InfoTableNamed位置上指定一个不同的结果表名)。

注意:以下第三条暗示:结果表既反映在Browser窗口,也反映在Map窗口中,换句话说,

可收查询结果保存为另一个图层。保存方法见下面的第5条。

3.如果你要看查询结果,打开一个M叩窗口或(和)一个Browser窗口。默认的是Mapinfo

自动以一个Browser窗口显示结果表(除非你清除了SQLSelect对话框中的BrowserResults

检查盒)。

如果你的结果表被命名为Selection(默认名),Browser窗就显示一个不同的表名,例如Queryl

名Query2。这是因为你浏览这个Selection表的瞬间,Mapinfo对该表作了一个"快拍",并

命名这个快拍为Queryn(n是数字,1或更大)。Mapinfo主要按快拍是因为"Selection”是一

个特殊的表名,每当你选择或不选择某些行时,Selection都在动态变化。

在SQLSelect对话框中,你可以为你的结果表输入一个另外的名字(例如,你可以命名你

的结果表为My-Query)。这就阻止了Mapinfo把你的结果表重命名为Queryn。

4.Mapinfo自动选择结果表中全部的行。这样,在你执行了SQLSelect之后,你就能够接

着执行选择行的全套操作。例如,你可以(通过选择Option>RegionStyle)对所有被选择的

行提供另一种充填色,或者你能够Cut或Copy选择的全部行。

通常,你对结果表所作的任何变化都会自动作用于你的原始(基础)表。例如,如果你用S

QLSelect选择了基础表中的某些行,然后又从你的结果表中删除了部分行,Mapinfo就会从

你的表中删除相应的行。但是,如果你查询产生了小计(Subtotals),你可以改变这个结果

表而不影响基础表。

5.如果你要作一个结果表的永久备份,选择File>SaveAs。

如果你你不执行SaveAs存盘,该结果表将在你退出Mapinfo时被删除。

SQLSelect对话框各区的填写

SelectColumns区

⑴利用这个区来指定在查询表中将出现哪些列。例如查询World表,可以指定Select

Columns:Country,Population,Indust_Grwth,如果你要你的结果表有与你的原表相同的列组,

那就在这个区输入一个*号。

如果你要你的结果有一个与你的原表不同的列组,就要删去这个*号并输入由逗号分隔的列

名(如下同)表达式列表。这个区能够包括一个*号或者一个列表达式列表,但不能同时包

括这两种。要在你填SelectColumns区之前填FromTables区。

如果你查询涉及的不止­个有,各个列名之前必须有它的表名,二者之间用西文句号分隔。

因此,如果你要执行一个涉及两个表的查询,其中之一是Canada表,并且你要查询包括该

表的Population列,那么你必须用列表达式Canada.Population。当你使用两个或多个表时,

Columns下拉列表自动把表名插到各个列名之前。

(2)只选择部分列出现在结果表中是有用的,特别是你的原表有很多列而你仅需操作其中的

少数列时(或许因为屏幕上只能同时显示少数列)

(3)如何输入一系列列名:

在FromTables区输入一个表名,可用键盘打入,也可用鼠标从Table下拉列表中选入。

用鼠标在SelectColumns区中按击,使插入点出现在该区内。

用退格键或删除键删去*号(如果其中有*号),SelectColumns区能够包含一个*号或者一串

列名,但不能同时包含这两种。

从对话框右边的Columns下拉列表中选择一个列名。Mapinfo把这个列名Copy到Select

Columns区。

如果你的查询还包括另外一些列名,从下拉列表中选择另外的一些列名。每当你选择另外的

列名时,Mapinfo自动插入逗号以分隔列名。

(4)计算某些列

SQLSelect能够计算出列(derivedColumns)并把这些导出列存放到结果表中。导出列是

Mapinfo在中根据基础表中已有的一个或多个列的内容计算出的一个特殊的临时列。

例如,你的表或许含有字段Purchases92或Purchases93(分别代表各顾客在1992和1993年

购物的总金额)。如果你要你的查询结果显示一个TotalPurchases列,表示各顾客1992和1993

年合起来的购物金额,你可以在你的SelectColomns区内包括一个导出列。在这个例子中,

导出列应该有这样的形式:

Purchases92+Purchases93

同样,你可能有一个包含有字段Fname(代表顾客的第一名)和Lname(顾客的后名)的顾客

信息表。如果你要你的结果表包括顾客的全名,你也可以在你的SelectColumns区包括一个

导出列,在这个例子中,导出列会有这样的形式:

Fname++Lname

为指定--个导出列,你就要在SelectColumns区输入一个表达式。一个导出列表达式是若干

列名,操作符(例如+和-)和函数(例如Ucase$函数,它把一个字串转换为大写的)的」

个组合。

在指定导出列之前,你必须先在FromTable区输入一个或多个表名。

如何指定一个导出列表达式

按SelectColumns区,在该区Hl现插入点。

删除区内的*号

输入一个列表达式。列表达式应该包括一个或多个列名,如果表达式包括一个以上的列名,

这个表达式一般包含操作符(例如+或-)来把多个列组合成为一个导出值。

有许多不同的函数和操作符能够用于列表达式中。

如果需要为列表达式指定一个别名。指定别名的方法是:在列表达式后打一个空格,然后再

打入用双引号括起来的别名。

别名是可选的。如果你给了你的列表达式一个别名,那么,当你以Browser窗口显示结果表

时别名就会出现在这个列的顶上。如果你没指定别名,M叩Info会用表达式的内容作为别名

(例如"Fname+Lname")。

如果需要,指定另外的列名或导出列表达式。如果你输入另外的列表达式,要输入逗号以隔

开不同的表达式。

下面的例子显示•个执行加法的导出列表达式,把两个数字列的值加起来。这个例子假定

Purchases92和Purchases93均为数字列:

Purchases92+Purchases93

下一个例子显示同样的列表达式,附加上了一个可选的列别名("Net_Purchases"):

Purchases92+Purchases93"NetPurchases”

下一个例子显示一个执行除法的导出列表达式,把Poppulagion列的内容除以一百万:

Population/1000000'lMillions^^

下一个例子显示一个把两个字串列组合起来的导出列表达式。这个例子假定Fname和

Lname都是字串列:

Fname+“"+Lname"Full_name”

当列是字串列时,加操作符(+)执行字串联接而不是数字相加。因此,表达式Fname+“"+

Lname产生一个由第一名紧跟空格再后跟一名组成的字串。

下个例子显示一个导出列表达式怎样结合函数调用。Proper$函数操作一个字串值并返回

一个有正常大写的字串(仅第一字母大写):

Proper$(Fname+'"'+Lname)“Full_name”

下一个例子显示如何用Format$函数重新格式化数字列。一般,数字列都没有包含逗号,不

幸的是,这使得读大数有困难。下面的例子用Format$函数把逗号插入到Purchases93列中。

这个例子假定Purchases93是一个数字列:

Format$(Purchases93,"$,#")"Purchases_1993”,字串表达式告诉Foramt$函数在列

前显示一个美元($)并在列内插入逗号。

下一个例子显示一个导出列怎样计算基础表中各行的地理面积:

Area(Obj,"sqkm")"Net_Area”

Obj是一特殊的列名,代表与表中各行相联系的地理对象。

WhereCondition区

(1)通过行的排列顺序联接不同的表

如果两个表没有一个共同的列,你可以根据行的顺序仍然能够联接这两个表。如果你知道一

个表的第一行与另•个表的第一行是相对应的,并且,•般地说,如果你知道第•个表的第

n行与第二个表的第n行是对应的,那么你就可以通过引用一个名叫RowID的特殊列来联

接这两个表。

RowID列含有一个整数值,代表着表中各行的行号。因此,任何表的第一行都有一个为1

的RowID值,第2行有一个RowID值2,等等。

为了联接两个表,让Mapinfo一个表的第n行与另一个表的第n行匹配起来,就要指定一个

WhereCondition表达式,形如下:

TABLE_l.RowID=TABLE_2,RowID

(2)从地理上(用地理操作符)联接不同的表

当两个表都有图形对象时.,Mapinfo能够根据这些对象之间的空间关系联接这两个表。所以,

即使你的表没有一个共同的列,你也有可能联接不同的表。

地理操作符允许你选择某些对象,根据它们与另外的某个对象的空间关系。Mapinfo有一个

与地理操作符一起使用的特殊列名,“Obj”或“Object”。这个列名指的是与你的表相边系

的图形对象。

地理操作符要放到所指定的对象之间,地理操作符从操作符(Operators)下拉列表中选取。

下表列出了地理操作符:

Contaions(含有)

ObjectAContainsObjectB

(如果B的形心在A的边界内的某个位置上)

ContaionsEntire(包含全部)

ObjectAContainsEntireObjectB

(如果B的边界全部在A的边界内)

Within(在内)

ObjectAisWithinObjectB

(如果A的形心在B的边界内侧)

EntireWithin(完全在内)

ObjcteAisEntireWithinObjectB

(如果A的边界全部在B的边界内)

Intersects(相交)

ObjcteAIntersectsObjectB

(如果它们至少有一个共同点或者它们中的一个完全在另一个内)

Contains与Within的比较是根据对象的形心,而ContainsEntire与EntireWithin的比较是根

据整个对象。

如果A包括整个B,那么A肯定包含B,如果A完全在B内,那么A肯定在B内。

Mapinfo执行简单的含有和在内比较,比执行完全含有和完全在内要快。因此,除非你绝对

相信某些对象是完全在另一些对象之内,否则你应该使用Contains和Within而不用Contains

Entire或EntireWithin(>

地理操作符提供了一种联接表的方法。当表中没有你能建立起联接的列时,你可以用地理操

作符(在WhereCondition区内)指定联接关系。如果你要执行一个涉及--个Cities表和一

个State表的两表查询,你可以用如下的表达式之一联接两个表:

Cities.ObjWithinStates.Obj

States.ObjContainsCities.Obj

在任何一种情况下,Mapinfo都能找到在各个州内的全部城市,然后把代表一个城市的一个

行与含有它的州的行联系起来。用同样的SQL查询,你也能够用集合功能来合计每个州的

城市数,或者以州为根据总结基于城市的数据。

当你有Counties表和一个Customers表时,Counties是多边形,Customers是点,你可以用

下列地理表达式之一指■个集合联接:

Customer.objWithinCounty.obj

County.objContainsCustomer.obj

地理操作符与Subselects结合特别有用(见PerferrningSubselects)

(3)联接两个或更多的表(根据共同字段)

一般,你是把你的资料贮存在几个不同的表中,你有你自己的数据文件,你也可能有从

Mapinfo购买的各种统计资料的数据库。SQL允许你建立关联以便你把这些不同表中的资料

接到一起,成为一个单独的结果表。设想这样一种情况:你有一个有人口统计交资料的

Counties表(各个County按年龄段、种族和职业种类的人口数统计),你还可能有关于顾客

订单资料的数据库。你想检测一下这两个表,看一定种类的订单是否来自具有一定人口统计

特征的Counties.,或许你想根据订单与人口的统计特征的组合选择若干个Counties(县)。

要做到这一点,你必须能够联接这两个表。

假设Counties表含有县名,同样订单表的一个列也含有订单来源的县名,这样,两个表都

有一个共同的字段,即县名。Mapinfo能够用这个共同的字段来联接这两个表。

Countyname1980人口,1990人口Order#CustomerCounty

Foster1980人口,1990人口478001FranicFoster

Williamette1980人口,1990人口478002JamesFoster

Mason1980人口,1990人口478003Wickmason

Counties表Order表

在SQLSelect对话框中,你用WhereCondition区告诉Mapinfo如何联接这两个表。在这个

区内填写如下:

SelectColumns:*

FromeTable:Counties,Order

WhereCondition:Counties.Countyname=Order.county

表名(在FromTables区)的顺序是重要的。如果两个表都含有Map对象,结果表将只含有

排列在FromTables区中第一个表的Map对象。另外,当查询完成时,Mapinfo会自动选择

列在FromTables区第一个表的部分或全部行。这样,在前例中,Mapinfo会选择Counties

表的部分或全部行。其结果也会包括从Orders表中拷贝来的数据,但Orders表本身不会被

选择。

在WhereCondition区中,列的顺序必须与FromTables区中表的顺序相匹配。在上例中,From

Tables区把Counties表放到了Qoders表之前,因此,WhereCondition区必须把

Counties.CountiName列放在Orders.County列之前。如果颠倒这两个表在FromTables区内

的顺序,你也必须颠倒在WhereContition区内列名的顺序。

当你联接两个表时,结果表的行数取决两个匹配的好坏。假定你有一个10000行的Order表,

要把这个Order表与有50行的States表联接。结果表可能有10000行之多。但是如果Orders

表中的某些行没有与States表中的行相匹配。结果表就会少于10000行。因此,如果Orders

表中有400行无state名(或许由于数据输入错误),并且如果这个关联是依赖State名,结

果表就可能只有9600个行了。

当SQLSelect对话框联接两个表时,你指定的如何联接这两个表的子句(Clause(s))必须放

在WhereCondition区内的其它子名之前。

你可以用UpdateColumn来修改SQLSelect多表联接的结果表。当你要更新一个表中带有另

一个表的信息的一个列时,你可以:

用SQLSelect联接这两个表。

针对Selection表使用UpdateColumn。

更新会自动影响到相应的基础表。

(4)次选择(Subselects)

Mapinfo允许SQLSelect中的再次选择。再选择是放在SQLSelect对话框WhereCondition

区内里面的一个选择语句。Mapinfo首先处理Subselects,然后用这个Subselects的结果去处

理主要的SQLSelecto

例如,假定你要选出1990年人口大于全国各州平均值的全部州。换句话说,如果平均州人

口是5百万,你要选出所有平均人口大于5百万的州。在实行中,你要在WhereCondition

区中使用如下的过滤标准:

Pop_1990>平均人口

然而,你并不知道那平均值是多少。但是,你知道Mapinfo能够用如下集合表达式计算出那

个平均值:

Avg(Pop_199)

为了计算平均州人口,要在WhereCondition区输入一个再选择(Subselect)。WhereCondition

区那时能够比较对Pop」990列再选择的结果。要进行那样一种查询,如下填写SQLSelect

对话框。

SelectColumns:*

FromTable:States

WhereCondition:Pop_1990>(SekectAvg(Pop_1990)FromStates)

再选择是在WhereCondition区内,在>操作符之后。再选择必须用园括号括起来。

最有用的再选择包括一个Select子句,一个from子句和一个Where子句,象下面这样:

Select某些列from某些表where某些条件存在。

考虑如下的SQLSelect,它选择各州中人口大于4000000的全部城市:

SelectColumns:*

Fromtable:cities

WhereCondition:objwithinany(SelectobjfromstateswherePop_1990>4000000)

再选择返回代表1990年人口大于400000的全部州的地理对象。然后主选择语句设到被再选

择选中了的州内全部城市。注意:主选择语句用了一个地理操作符(Within)来做这个事情。

虽然前一查询用两个表,States表和Cities表,但Cities是出现FromTables区的仅有的表。

这是因为在再选择中使用了Slates。如果一个表仅仅是被用于再选择内,那么这个表的表名

不需要出现在FromTables区中。

在下一个例子中,我们选择与田西纳州相交的所有州,换言之,所有相邻的州。

Selectcolumns:*

Fromtables:states

Whereconditions:objIntersects(selectobjfromstateswhere

state=''TN"

首先,M叩Info执行再选择:

Selectobjfromstateswherestate="TN"

再选择找到了代表田纳西州的图形对象。然后主Wherecondition找到了States表中与代表

田纳西州的图形相交的全部对象。你可以用类似的查询选择与某给定街道相交的全部街道。

现考虑这个例子:

Selectcolumns:*

FromTables:County

WhereCondition:County.objcontainsany(selectobjfromdealers)

这个查询找到含有销售商的所有县。主Wherecondition有这样的一个形式:

一个县对象Contains—个经销商对象。

经销商对象组是山再选择:Selectobjfromdealers产生的。Mapinfo选择代表含有经销商的

各个县对象的行。

最后,对于再选择有几点注意事项:

在再选择中你可以使用在FromTable区中未列出的表.但是你必须把这些表列在你的再选择

的From子句中(如前面例子所示那样)。

当再选择带有关键字"any"或“all”时,再选择必须并且只能返回一个列。下面的句例是

无效的,因为它试图返回两个列(State_name和Pop」990):

Any(Selectstate_name,pop_1990fromstate)

当再选择不带“any"、“all”或“in”时,再选择必须准确返回一个行的值。下面的例子是

无效的,因为再选择返回了一组行:

objwithin(SelectobjfromstatewherePop_1990>2000000)

当再选择不用“any"、“all”或“in”时,你不能在再选择中使用GroupbyColumns子句。

你不能有嵌套的再选择,即是说,每个Select语句你只能有一个再选择。

设置过滤标准

一个过滤标准是一个逻辑表达式,它通常把一个列值与某个另外的值作比较。例如,以下的

过滤标准用大于操作符(>)测试订单金额列是否有大于100的值。

WhereCondition:Order_Amount>100

如果•个查询包含了上面这个WhereCondition了句,Mapinfo就只选择那些订单金额值大

于100的行。

WhereCondition区可以包含两个或更多的逻辑表达式,但这些表达式必须被词“And”或“Or”

隔开。如果表达式是用词And连接,Mapinfo仅选择那些两个标准满足的行。如果表达式是

用Or连接,Mapinfo就选择满足其中任何一个标准的行。

过滤标准可用于你的基础表的任何一个列,不管你是否在SelectColumns区中包括了这个

列。

列可以用列名或列号来引用,列号指明是在SelectColumns中已有的列的顺序。

因此,“Col”和“816”分别指第一和第六列,号之前必须有字母“Col”。

用SQLSelect对话框的WhereCondition区的基本目的可能是两个:行过滤和关联。Where

condition区服务于多个目的。在某些场合下,你可能要用一个Wherecondition表达式来过

滤你的表,以便你只看到满足一定标准的那些列。在一些场合下,你要利用Wherecondition

区来指定一种关联,以便你的查询能够包括来自两个或更多个表中的列。

注意:你不可以在Wherecondition区中使用集合函数(apgregatefunction)。

OrderbyColumns(按列排序)区

选择升序和降序

默认,Mapinfo是用升序排序一个表。如果你要用一个字符型字段进行排序,升序意味着A

出现在B之上,如此类推。如果你对一个数字型字段进行排序,小的数值出现在大的数值

之上。

为了以降序排序,以便大的数出现在小的数之上,要在OrderByColumns区中的列名之后

放一个词desc。例如,你查询World表,用如下的方式:

OrderByColumnsopulationdesc

是用Population对这个表排序,降序。

当Mapinfo执行多级排序时,各级排序有其自己的升/降序设置。这样,下面的例子按State

列执行升序,然后按Population列执行降序:

SelectColumns:*

FromTable:City_lK

OrderByColumns:State,Populationdesc

在OrderByColumns区中的列名句法:

在这个区,你有两种方法输入一个列名:

输入列的名字(例如前例中的列名state)

输入列号,这里的1代表排列在SelectColumns区中的第一列,在数字之前不要打入“Col”。

如果你要用一个导出列进行排序并且这个导出列有一个别名的话,你可以在OrderBy

Columns区输入这个别名。如果导出列没有别名,就输入列号(例如1)。

用OrderByColumns字段对结果表排序

在SQLSelect对话框中,利用OrderByColumns区,允许你对结果表的行进行排序。排序

影响到出现在Browser窗口中和各个行从顶到底出现的顺序。如果你打算把Browser窗口作

为一报告打印出来,你可能要对你的结果表进行排序。

OrderByColumns区是可选的,如果你留下这个区空着,结果表就不被排序。如果你在这在

区输入一个列名,Mapinfo就根据那个列的内容对结果表进行排序。

实现多级排序

在OrderByColumns指明多级排序的列名要用逗号隔开。依次为第一级、第二级…

GroupByColumnsE(按列分组)建立小计用

用GroupByColumns区小计结果表

SQLSelect对话框中GroupByColumns区是可选的。如果你在这个区输入一个或多个列名,

结果表将含有这个表的小计(Subtotals),或集合信息。

注意:结果表变成了小计表,没原始数据,小计的依据是列值相同者。

当你指定一个GroupByColumns值时,Mapinfo查询所指定的列,看那个列的那些行有相

同的值。因此,结果你有一个顾客数据库,并且你是按StateName列分组,Mapinfo就会把

所有California的顾客放列到另一个组,如此等等。Mapinfo然后计算各组的集合信息(总

合,均值等)。

为指定小计标准:

1.在GroupByColumns区,输入Mapinfo将用来计算小计的列名或列号

例如:

如果你要在各个州的基础上合计你的顾客表,输入表示顾客所在的州的列名(例如

StateName)至GroupByColumns区

2.输入同样的列名(例如StateName)到SelectColumns区。

3.在SelectColumns区输入一个或多个集合操作符(Sum,Count,Avg,Min,或Max)。记住,要

用逗号分隔这些集合操作符。

输入表达式Count(*)o(在SelectColumns区)

如果你要计算各州的全部销售(Sales)合计,输入如Sum(Sales)之类的表达式。(这里的

Sales是列名S

在SelectColumns区中,那些非集合函数基础的所有列还必须在GroupByColumns区列出。

这些是Mapinfo为了确定分组要检测的列。这些列具有独特数据值的每一个组在查询表中有

一个单独的行。导出列应该用表示相对位置的编号指定,“1”、“2”、“5”分别代表第一、第

二和第五列。

例如:

SelectColumns:Month(sick_date),count(*)

FromToltes:sickdays

GroupByColumns:1

这个查询告诉Mapinfo,计算每一个有记录的全部行数并生成一个按月分组的查询表。结果

表第月有一行,那个行有一个表示有多少人在那月生病的列。

在GroupByColumns区,你应该按列名或列编号来引用列(1代表列在SelectColumns区的

第一个列)。当你不使用联接时,你可以用正规的字段名。当你用导出列的值分组时,或者

如果你联接两个表时,你必须用列号代替列名。按号引用列时,数字前不要加“Col”字样。

你可以输入一个以上的列到GroupByColumns区。Mapinfo首先按你列出的第一个列来对

行进行分组,在那些组中,Mapinfo再按第二个列进行再分组,以此类推。对于各个结果行,

查询表都含有基于集合函数的全部列的集合值。

(这里有一个问题,每一个结果行只能是一个集合函据的结果吗?可否不同的列执行不同的

集合函数?)

注:在SelectColumns区中,那些基于集合函数的列不能列入GroupByColumns区内。但

是,SelectColumns区中那些不是基于集合函数的每一个列应该列入GroupByColumns区内。

GroupByColumns的例子(按列分组的例子)

设想你有一顾客订单表。表中的各个行代表一分单独的订单。表中有一个列含有接受订单的

销售代表的名字,另一个列含有顾客的名字,再有一个列含有订单金额(Amount).

对每个销售代表,你想找出:

那个销售代表接受的订单数量

那个代表登录的订单平均金额

那个代表填写的订单的总金额

如下的SQLSelect查询产生所要求的结果:

SelectColumns:Sales_Rep,count(*),average(Amount),sum(Average)

Fromtables:Order

GroupByColumns:Seles_Rep(这意味着按销售代表统计)

注意:GroupByColumns区和SelectColumns区的三个集合操作符。Mapinfo要做的是:

1.找出对应某一个销售代表的全部行

2.计算行数:Count(*)

3.计算这个销售代表的定单的平均金额:Avg(Amount)

4.计算这个销售代表的定单的总金额:Sum(Amount)

Mapinfo对每一个销售代表都要做这些工作,然后产生一个对每一个代表有一个单独行的结

果表。

集合操作符(Count,Avg和Sum)小计有相同销售代表值的全部行的数据值。

考虑这样一个SQLSelect:

Selectcolumns:Customer,Count(*),Avg(Amount),Sum(Amount)

Fromtables:Orders

GroupByColumns:Customer

这是一个在体质上与前一个相同的查询,除了我们现在是按顾客分组而不是按销售代表分组

外,这个SQLSelect找出订单Count,Average和Sum是针对各个顾客的而不是销售代表的。

下面的例子说明按多列分组:多重分组

Selectolumns:Sales_Rep,Customer,Count(*),Avg(amount),Sum(Amount)

Fromtables:Orders

GroupByColumns:Sales_Rep,Customer

在GroupByColumns区,我们指定了两列名,在这种情况下,Mapinfo首先按销售代表组

合行,然后再按顾客组合。这个查询的结果表对应于每一个不同的顾客来销售代表组合都有

一个行。

当某个顾客通过两个或更多的销售代表订货时,那个顾客与第一个销售代表做的生意都有一

个行来总结。全部行首先是按销售代表分组,然后,对于各个销售代表,又按顾客分组。

集合函数,Mapinfo有下列集合函数:

Count(*):计算一个组内的记录个数,它仅用*作为其参数是因为它适用于整个记录,而不是

记录中的某个特定字段。

Sum(表达式):计算一个组全部记录表达式值的总利

Avg(表达式):计算一个组全部记录表达式值的平均值

Max(表达式):找出一个组全部记录表达式值中的最大值

Min(表达式):找出一个组全部记录表达式值中的最大值

以上所述的表达式,最简单的情况是一个字段名(列名)。

关于Fromtables

这个区告诉Mapinfo要查询那些表,你必须在这个区最少输入一个表名。如果你要M叩Info

查询两个或更多的表,就要输入用逗号分隔的一系列表名。

如果你在这个区输入了两个或两个以上的表名,那么,你还必须在WhereCondition区指定

表达式来告诉Mapinfo如何连系这些表。

如果你输入了两个表名,Mapinfo自动计算,•个适当的WhereCondition表达式。但是如果

你用了三个或更多的表名,你必须手工修改这个表达式。当你按多表联接时,所有的表必须

是基础表。你不能把结果表(例如Qurey5)用于多表SQLSelec。

关于WhereCondition区

这个区有不同的任务,取决于你的查询性质。当你查询•个单表时,该区是可选的(即不填

也可)。如果你查询涉及到连接两个或多个表,你必须指定一个WhereCondition表达式,那

个表达式必须表明Mapinfo应该如何联接这两个表。

如果你愿意,你可以在该区输入过滤标准。输入过滤标准的方法是打入一个判断真假的逻辑

表达式。例如,当你查询World表时,如果你只选择人口大于5百万的行,就要指定如下的

WhereCondition子句:

WhereCondition:Population>5000000

这个区的数字中间不要打逗号。

关于GroupbyColumns区

这个区允许你小计你的结果表。如果你输入一个列名(或被逗号分隔的一串列名)到该区,

Mapinfo就小计你的查询结果,并且只给你显示出小计结果表,而不显示你的表的每个行。

计算小计是一个两步曲:

1.输入一个(或一组)列名到该区

2.输入同样的列名和集合运算器(诸如Sum或Count)到SelectColumns区。GroupbyColumns

区是可选的。如果你保留为空(默认的),M叩Info将不计算小计。

关于OrderbyColumns区

这个区允许你对你的结果表进行排序。如果你输入・个(或被逗号分隔的一组)列名到该区,

Mapinfo就以你输入的列作为关键字对你结果表的行进行排序。默认是升序,A在B之上,

小数在大数之上。降序可在列名后跟一个desc字。例如:

OrderbyColumnsopulationdesc

该区是可选的,如果空着,结果表将不排序。

关于IntotableNamed区

这个区允许你命名结果表。默认的结果表名是Selection。如果你要指定一个另外的名字,就

把它打入该区。你输入的表名不应该是一个打开的表。如果你频繁使用SQLSelect,并且如

果你用selection作为你的结果表名,你会以得到许多左上重叠的结果表(例如

Query1,Query2,Query3等)告终。这些Queryn表不会造成任何伤害;然而,有的人就是不

喜欢这大量打开的表。如果你要避免这大量打开的Queryn表,那你在该区输入一个另外的

表名就行了。例如你输入表名Qresults:

IntoTableNamed:Qresults

然后再进行的各个SQL操作就只用Qresults作为结果表名。这个方法,你只能得到一个结

果表(Qresults),不管你进行了多少次查询。

关于BrowseResults

如果你标证了BrowseResults检查框,Mapinfo自动以一个Browser窗口显示查询结果。

关于Aggregates,Function,Operator等的下拉列表(略)

SQLSelect的目的是什么?

它是一个多目的的查询工具。用SQL选择,你可以完成下列任务之一或全部:

过滤你的数据,以便你只看到你感兴趣的行和列

执行关系连结,把两个或多个表组合成一个结果表

创建关系连结,(根据」有列的内容计算出新值的列)

按数据值或(和)字母顺序排序你的数据

小计你的数据,以便你只看到一个小计表,而不是整表

Select的目的

Select允许你查询你的数据库,根据一定的准则从一个表中选择记录和对象,并创建一个你

以平面图、表格浏览器或曲线图方式来观看的结果表。

Select对话框允许你指定查询准则

对话框各栏的填写

SelectrecordsfromTable选择你要操作的表

ThalSatisfy在此打入你的查询表达式,或者用鼠标点Assist钮使显示表达式对话框,这个

对话框将帮助你构成你的查询表达式。

Storeresultsintable(optional)

这个选项允许你命名保存查询结果的临时表。“Seltction”是默认值。如果你选择了

“Selection",Mapinfo就命名这个表为Queryl,Query2等。

SortresultsbyColumn(optional)

当你要查询结果按某个列的值排序时,选择

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论