⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapinfo教学1.doc

📁 对于想学MapInfo的人来说
💻 DOC
📖 第 1 页 / 共 3 页
字号:

Where Condition: Counties.Countyname=Order.county

表名(在From Tables区)的顺序是重要的。如果两个表都含有Map对象,结果表将只含有排列在From Tables区中第一个表的Map对象。另外,当查询完成时,MapInfo会自动选择列在From Tables区第一个表的部分或全部行。这样,在前例中,MapInfo会选择Counties表的部分或全部行。其结果也会包括从Orders表中拷贝来的数据,但Orders表本身不会被选择。

在Where Condition区中,列的顺序必须与From Tables区中表的顺序相匹配。在上例中,From Tables区把Counties表放到了Qoders表之前,因此,Where Condition区必须把Counties.CountiName列放在Orders.County列之前。如果颠倒这两个表在From Tables区内的顺序,你也必须颠倒在Where Contition区内列名的顺序。

当你联接两个表时,结果表的行数取决两个匹配的好坏。假定你有一个10000行的Order表,要把这个Order表与有50行的States表联接。结果表可能有10000行之多。但是如果Orders表中的某些行没有与States表中的行相匹配。结果表就会少于10000行。因此,如果Orders表中有400行无state名(或许由于数据输入错误),并且如果这个关联是依赖State名,结果表就可能只有9600个行了。

当SQL Select对话框联接两个表时,你指定的如何联接这两个表的子句(Clause(s))必须放在Where Condition区内的其它子名之前。

你可以用Update Column来修改SQL Select多表联接的结果表。当你要更新一个表中带有另一个表的信息的一个列时,你可以:

用SQL Select联接这两个表。 
针对Selection表使用Update Column。 
更新会自动影响到相应的基础表。

(4)次选择(Subselects)

MapInfo允许SQL Select中的再次选择。再选择是放在SQL Select对话框Where Condition区内里面的一个选择语句。MapInfo首先处理Subselects,然后用这个Subselects的结果去处理主要的SQL Select。

例如,假定你要选出1990年人口大于全国各州平均值的全部州。换句话说,如果平均州人口是5百万,你要选出所有平均人口大于5百万的州。在实行中,你要在Where Condition区中使用如下的过滤标准:

Pop_1990>平均人口

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

Avg(Pop_199)

为了计算平均州人口,要在Where Condition区输入一个再选择(Subselect)。Where Condition区那时能够比较对Pop_1990列再选择的结果。要进行那样一种查询,如下填写SQL Select对话框。

Select Columns: *

From Table: States

Where Condition: Pop_1990>(Sekect Avg(Pop_1990) From States)

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

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

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

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

Select Columns: *

From table: cities

Where Condition: obj within any(Select obj from states where Pop_1990>4000000)

再选择返回代表1990年人口大于400000的全部州的地理对象。然后主选择语句设到被再选择选中了的州内全部城市。注意:主选择语句用了一个地理操作符(Within)来做这个事情。

虽然前一查询用两个表,States表和Cities表,但Cities是出现From Tables区的仅有的表。这是因为在再选择中使用了States。如果一个表仅仅是被用于再选择内,那么这个表的表名不需要出现在From Tables区中。

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

Select columns: *

From tables: states

Where conditions: obj Intersects(select obj from states where 

state=”TN”

 

首先,MapInfo执行再选择:

Selectobj from states where state=”TN”

 

再选择找到了代表田纳西州的图形对象。然后主Where condition找到了States表中与代表田纳西州的图形相交的全部对象。你可以用类似的查询选择与某给定街道相交的全部街道。

现考虑这个例子:

Select columns: *

From Tables: County

Where Condition: County.obj contains any(select obj from dealers)

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

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

经销商对象组是由再选择:Select obj from dealers产生的。MapInfo选择代表含有经销商的各个县对象的行。

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

在再选择中你可以使用在From Table区中未列出的表.但是你必须把这些表列在你的再选择的From子句中(如前面例子所示那样)。 
当再选择带有关键字”any”或”all”时,再选择必须并且只能返回一个列。下面的句例是无效的,因为它试图返回两个列(State_name 和Pop_1990): 
Any(Select state_name,pop_1990 from state)

当再选择不带”any”、“all”或“in”时,再选择必须准确返回一个行的值。下面的例子是无效的,因为再选择返回了一组行: 
obj within(Select obj from state where Pop_1990>2000000)

当再选择不用”any”、“all”或“in”时,你不能在再选择中使用Group by Columns子句。 
你不能有嵌套的再选择,即是说,每个Select语句你只能有一个再选择。 
设置过滤标准

一个过滤标准是一个逻辑表达式,它通常把一个列值与某个另外的值作比较。例如,以下的过滤标准用大于操作符(>)测试订单金额列是否有大于100的值。

Where Condition:Order_Amount>100

如果一个查询包含了上面这个Where Condition子句,MapInfo就只选择那些订单金额值大于100的行。

Where Condition区可以包含两个或更多的逻辑表达式,但这些表达式必须被词“And”或“Or”隔开。如果表达式是用词And连接,MapInfo仅选择那些两个标准满足的行。如果表达式是用Or连接,MapInfo就选择满足其中任何一个标准的行。

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

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

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

用SQL Select对话框的Where Condition区的基本目的可能是两个:行过滤和关联。Where condition区服务于多个目的。在某些场合下,你可能要用一个Where condition表达式来过滤你的表,以便你只看到满足一定标准的那些列。在一些场合下,你要利用Where condition区来指定一种关联,以便你的查询能够包括来自两个或更多个表中的列。

注意:你不可以在Where condition区中使用集合函数(apgregate function)。

Order by Columns(按列排序)区

选择升序和降序

默认,MapInfo是用升序排序一个表。如果你要用一个字符型字段进行排序,升序意味着A出现在B之上,如此类推。如果你对一个数字型字段进行排序,小的数值出现在大的数值之上。

为了以降序排序,以便大的数出现在小的数之上,要在Order By Columns区中的列名之后放一个词desc。例如,你查询World表,用如下的方式:

Order By Columns:Population desc

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

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

Select Columns: *

From Table: City_1K

Order By Columns: State,Population desc

在Order By Columns区中的列名句法:

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

输入列的名字(例如前例中的列名state) 
输入列号,这里的1代表排列在Select Columns区中的第一列,在数字之前不要打入“Col”。 
如果你要用一个导出列进行排序并且这个导出列有一个别名的话,你可以在Order By Columns区输入这个别名。如果导出列没有别名,就输入列号(例如1)。

用Order By Columns字段对结果表排序

在SQL Select对话框中,利用Order By Columns区,允许你对结果表的行进行排序。排序影响到出现在Browser窗口中和各个行从顶到底出现的顺序。如果你打算把Browser窗口作为一报告打印出来,你可能要对你的结果表进行排序。

Order By Columns区是可选的,如果你留下这个区空着,结果表就不被排序。如果你在这在区输入一个列名,MapInfo就根据那个列的内容对结果表进行排序。

实现多级排序

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

 

Group By Columns区(按列分组)建立小计用

用Group By Columns区小计结果表

SQL Select对话框中Group By Columns区是可选的。如果你在这个区输入一个或多个列名,结果表将含有这个表的小计(Subtotals),或集合信息。

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

当你指定一个Group By Columns值时,MapInfo查询所指定的列,看那个列的那些行有相同的值。因此,结果你有一个顾客数据库,并且你是按StateName列分组,MapInfo就会把所有California的顾客放列到另一个组,如此等等。MapInfo然后计算各组的集合信息(总合,均值等)。

为指定小计标准:

1.在Group By Columns区,输入MapInfo将用来计算小计的列名或列号

例如:

如果你要在各个州的基础上合计你的顾客表,输入表示顾客所在的州的列名(例如StateName)到Group By Columns区

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

3.在Select Columns区输入一个或多个集合操作符(Sum,Count,Avg,Min,或Max)。记住,要用逗号分隔这些集合操作符。

输入表达式Count(*)。(在Select Columns区)

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

在Select Columns区中,那些非集合函数基础的所有列还必须在Group By Columns区列出。这些是MapInfo为了确定分组要检测的列。这些列具有独特数据值的每一个组在查询表中有一个单独的行。导出列应该用表示相对位置的编号指定,“1”、“2”、“5”分别代表第一、第二和第五列。

例如:

Select Columns: Month(sick_date),count(*) 

From Toltes: sickdays

Group By Columns: 1

这个查询告诉MapInfo,计算每一个有记录的全部行数并生成一个按月分组的查询表。结果表第月有一行,那个行有一个表示有多少人在那月生病的列。

在Group By Columns区,你应该按列名或列编号来引用列(1代表列在Select Columns区的第一个列)。当你不使用联接时,你可以用正规的字段名。当你用导出列的值分组时,或者如果你联接两个表时,你必须用列号代替列名。按号引用列时,数字前不要加“Col”字样。

你可以输入一个以上的列到Group By Columns区。MapInfo首先按你列出的第一个列来对行进行分组,在那些组中,MapInfo再按第二个列进行再分组,以此类推。对于各个结果行,查询表都含有基于集合函数的全部列的集合值。

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

注:在Select Columns区中,那些基于集合函数的列不能列入Group By Columns区内。但是,Select Columns区中那些不是基于集合函数的每一个列应该列入Group By Columns区内。

Group By Columns的例子(按列分组的例子)

设想你有一顾客订单表。表中的各个行代表一分单独的订单。表中有一个列含有接受订单的销售代表的名字,另一个列含有顾客的名字,再有一个列含有订单金额(Amount).

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -