首页 百科知识 表指定数据查询的方法

表指定数据查询的方法

时间:2022-06-19 百科知识 版权反馈
【摘要】:五、MapBasic表数据查询1.从表中选择数据MapBasic的Select语句可以完成复杂的数据选择操作,然后将选择结果用于后续处理。Select子句中选择结果为多个数据项时,项之间用逗号分隔。如果在expression_list中的项表达式中包括“obj”项,那么结果表中将包括指出附属该数据行图形对象类型的字段。当Select语句选择一系列表数据行和列时,MapBasic程序可用Selectlnfo()函数检查结果表。通过Into子句可为查询结果表指定表名。

五、MapBasic表数据查询

1.从表中选择数据

MapBasic的Select语句可以完成复杂的数据选择操作,然后将选择结果用于后续处理。该语句从一个或多个打开的Mapinfo表中选择特定的行和列,将选择结果作为一个与源表分离的临时表。同时该语句还提供了排序和汇总计算功能。Select语句的语法形式为:

Select expression_list

 From table_name[,…][Where expression_group]

 [Into results_table[Noselect]]

 [Group By column_list]

 [Order By column_list]

其中,expression_list为用逗号分隔的表达式,组成选择结果的列;table_name为一个打开的表名;expression_group为一个或多个用AND或OR连接条件表达式;results_table为存储选择结果的表名,结果表的默认名称为Selection;column_list为用逗号隔开的一个或多个字段名。

Select语句中包含几个子句,可根据实际需要选择不同的子句,完成特定的操作。这些子句不相互排斥,一个Select语句中可以包含所有的可选子句。

(1)Select子句。Select子句指定包含在结果表中的列,即检索内容。最简单的expression_list为“*”,表示选中表中所有列,如Select*From world。Select子句中选择结果为多个数据项时,项之间用逗号分隔。Select子句中的数据项除了字段外,还可以是常数或表达式。

下例Select语句定义包括2个项名表达式的子句,第一项是简单项名country,第二项是调用函数Round()对表字段population操作。当select语句执行后,对应的结果表中第一项是包含来自表World表的country字段,第二项则是来自World表中population字段经过Round()函数运算后的值。

Select country,Round(population 1000000)

From world

在exprission_list中的每一表达式可用跟在表达式后的别名为其重新命名。下述语句为结果表中第二项定义字段别名为“Millions”。

Select country,Round(population 1000000)"Millions"

   From world

任何一个可地图化的表都有一个特定的称为“object”的字段(缩写为obj)。如果在expression_list中的项表达式中包括“obj”项,那么结果表中将包括指出附属该数据行图形对象类型的字段。

当Select语句选择一系列表数据行和列时,MapBasic程序可用Selectlnfo()函数检查结果表。如果这些被选择的数据记录对应有图形对象,这些相应的图形对象就会在图形窗口中闪烁。

(2)From子句。From子句指定从哪些表中选择数据。如果进行了多个表的连接操作,选择的表必须是基表,而不是查询结果表。

(3)Where子句。Where子句通常用来指明选择的数据应该满足的条件。应用程序可以按一定的规则灵活定义条件表达式,但应该注意多个条件之间必须使用关键词And或Or连接,而不是用逗号分隔。例如:Where price>5000 And price<8000。

当引用特定字段名“object”时,Where子句可以测试可地图化表中每行的图形信息;如果表达式定义为“Not object”时,则选择没有附着图形对象的数据记录。如子句“Where Not Object”将告诉MapBasic应用程序只选择未含地理编码的记录。

如果Select语句要选用2个或2个以上的表,此时就必须包括Where子句,并且Where子句包括一个如何连接2个表的条件表达式。典型的连接表达式如:tablename1.field= tablename2.field,这样的形式表明2个表的被选的2个字段有对应的值。

相应地,也可定义一个图形对象操作告诉MapInfo如何连接2个表,如:Where tablename1.obj Contains tablename2.obj。

Where子句还可以通过Any和All关键词定义值的子集。Any关键词定义一个子集,允许Where子句测试对应子集中任一值条件表达式是否为真;相反地All关键词定义一个子集,允许Where子句测试对应子集中所有值条件表达式是否为真。

Select语句的Where子句还可以嵌套定义自己的Select语句,即生成所谓的子查询。在下例中,Where子句嵌套一个Select语句,功能是选择表states中人口值大于人口均值的记录。

Select*From states

  Where population>

  (Select Avg(population)From states)

(4)Into子句。通过Into子句可为查询结果表指定表名。如果Select语句缺省Into子句,则MapInfo将结果表命名为Selection。当后续操作涉及Selection表时,MapInfo将为该表建立“快照”,并命名为QUERYn(如QUERY1)。

语句中如果包含NoSelect关键字,则执行的选择不改变已经存在的Selection表。

(5)Group By子句。Group By子句定义当执行计算函数时对记录行如何进行分组。在Group By子句中,通常可定义一个字段名或字段名列表,然后MapBasic将建立一个包含计算结果的表。例如,在下例中,假定表sample描述某城市地价样点信息,表中district字段为样点所属区域,price字段为样点地价,则下列代码将表中记录按区域分组,并计算每个区域内样点个数和样点均价。

Select district,Count(*),Avg(price)

  From sample

  Group By district

(6)Order By子句。Order By子句规定选择数据依据某个字段或某几个字段按一定的顺序排列。默认情况下,查询结果按Order By子句定义的关键字段表达式的升序排序,如果要按降序排列,应在字段名后附加关键词“Desc”。如下例,首先对表记录按district升序排序,然后在每个district组中对price用降序排列。

Select*

  From sample

Order By district,price Desc

(7)地理操作。MapBasic支持多种地理操作,如Contains、Contains Par、Contains Entire、Within、Partly Within、Entirely Within和Intersects等。这些地理操作能用于任一表达式中,在Select语句的Where子句中非常有用。以下例程查询A010-5号宗地内的地价样点。

Select*From sample

 Where obj Intersects(Select obj From parcels

  Where parcels.parcel_code=“A010-5”)

调用Select语句后,MapBasic程序可以使用SelectionInfo()函数来检查当前的选择集的有关信息,如被选择表的名称、查询的临时表名、选择的记录数等。

2.初始化地址查询

在调用Find语句决定查询地图对象之前,必须使用Find Using语句指定需要查询的表和字段。

Find Using语句的语法形式为:

Find Using table(column)

  [Refine Using table(column)]

  [Options[Abbrs{On|Off}]

  [ClosestAddr{On|Off}]

  [OtherBdy{On|Off}]

  [Symbol symbol_style]]

其中,table为一打开的表,column为表中的字段名,symbol_style为一符号变量或一返回符号值的函数。

Find Using语句定义了当MapBasic执行Find语句时查找哪些表和哪些字段,注意所指定的字段必须建立了索引。Refine子句指定要查找的第二个表,该表用于附加的查询标准,表中必须包含区域对象,所指定的字段可以未建立索引。如果Find Using语句中不包含Refine子句,后续的Find语句将使用一个简单的定位名,如果包含Refine子句,后续的Find语句将使用一定位名和一区域名

Abbrs子句指定MapBasic是否试图替代来自缩写文件的缩写词进行查找匹配,缺省时选择取值On。

ClosestAddr子句指定查找地址不匹配时,MapBasic是否用最接近的有效地址匹配。默认值为Off。

OtherBdy子句指定MapBasic是否匹配在refining区域中的记录,默认值为Off。

3.按地址查询图形对象

由Find Using语句规定MapBasic搜索的表和字段后,就可以利用Find语句在可地图化的表中查询指定名称的地图对象。Find语句语法形式为:

Find address[,region][Interactive]其中,address为表示查找的地图对象名称的字符串表达式,region为用于精确查找的区域对象名称。

如果Find语句包括Interactive关键词,在MapBasic不能定位指定的地址时,弹出一对话显示近似匹配的列表清单供用户选择。Find语句可以在address参数后指定用于限制搜索范围的区域名称,如下例同时指定一城市名称"Albany"和区域名称"NY"来限制搜索。

Find Using cities(city)

  Refine Using states(state)

Find"Albany","NY"

在Find语句执行后,可以调用CommandInfo()函数来获取查询信息。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈