第 5 章 空间数据查询

Preview:

DESCRIPTION

第 5 章 空间数据查询. 5.1 对象查询 5.1.1 对象 5.1.2 对象查询 5.2 SQL 查询 5.2.1 通过“选择”来查询 5.2.2 通过“选择 SQL” 查询 5.2.3 “ SQL 选择”的操作示例. 5.2.4 SQL 选择 5.2.5 “选择列”字段 5.2.6 “条件”字段 5.2.7 “按列排序”字段 5.2.8 “按列分组”字段 5.2.9 聚合函数 5.3 习题5. 5.1 对象查询. - PowerPoint PPT Presentation

Citation preview

第第 55 章章 空间数据查询空间数据查询

5.1 对象查询

5.1.1 对象

5.1.2 对象查询

5.2 SQL 查询

5.2.1 通过“选择”来查询

5.2.2 通过“选择 SQL” 查询

5.2.3 “SQL 选择”的操作示例

5.2.4 SQL 选择

5.2.5 “ 选择列”字段

5.2.6 “ 条件”字段

5.2.7 “ 按列排序”字段

5.2.8 “ 按列分组”字段

5.2.9 聚合函数

5.3 习题 5

5.1 5.1 对象查询对象查询

5.1.1 5.1.1 对象对象 1. 点对象 :点是有特定的位置,维数为零的物体 。 2. 线对象:是 GIS 中非常常用的维度为一的空间组分,表示对象和它们边界的空间属性,由一系列坐标表示。 3. 多边形对象 :面状实体也称为多边形,是对湖泊、岛屿、地块等一类现象的描述。通常在数据库中由一封闭曲线加内点来表示。

5.1.2 5.1.2 对象查询对象查询

图 5-1 选择好记录的窗口

图 5-2 “ 浏览表”对话框

图 5-3 查询结果浏览窗口

5.2 5.2 SQLSQL 查询查询

SQL ( Structure Query Language )是结构化查询语言,是一套强大的查询系统。语言简单、指令简洁、操作简单、功能强大,被广泛运用在相互关联的数据库中,并能完成十分复杂的查询和选择。

5.2.1 5.2.1 通过“选择”来查询通过“选择”来查询

图 5-4 “ 查询”菜单

图 5-5 “ 选择”对话框

1. 从表中选择记录 2. 满足条件 3. 存结果于表 4. 结果排序按列 5. 浏览结果 6. 保存模板 7. 载入模板

图 5-6 “ 表达式”对话框

5.2.2 5.2.2 通过“选择通过“选择 SQL”SQL” 查询查询

1. 选择列

2. 从表

3. 条件

4. 按列分组

5. 按列排序

6. 结果放入表

7. 浏览结果

8. 使用下拉列表

9. 保存模板

10. 载入模板图 5-7 “SQL 选择”对话框

5.2.3 “5.2.3 “SQLSQL 选择”的操作示例选择”的操作示例 例如:查询并显示出人口大于 3000 万的省份

图 5-9 满足条件的浏览窗口

图 5-10 人口 >3000 万的省份单独显示

图 5-11 不排序 图 5-12 升序 图 5-13 降序

5.2.4 5.2.4 SQLSQL 选择选择 ① 打开希望查询的表(倘若尚未打开的

话)。 ② 选择“查询”→“ SQL 选择”。 ③ 打开一个地图窗口或一个浏览窗口(若

用户想看到查询结果)。 ④MapInfo 自动选中结果表中所有行。

⑤ 若希望对查询表做一个永久拷贝,选择“文件”→“另存为”。

5.2.5 “5.2.5 “ 选择列”字段选择列”字段

1. 计算派生列 “SQL 选择”可以计算派生列并将其

保存在结果表中。【例 5-1 】显示一个进行加法运算的派生

列表达式,它将两个数值型列相加。例中假设 Purchase92 和 Purchase93 都是数值型字段。

选择列: Purchase 92 Purchase 93

2. 选择显示在结果表中的列 结果表中只包括在“选择列”域中输入的一个或多个列。

这一点在表中有许多列,而只希望使用其中少数列(可能是因为在屏幕上一次只能显示其中少数列)时很有用。

输入一系列列名: ① 在“从表”域中输入表名(若还未输入的话)。可以直接

输入表名或是在“表”下拉式列表中选择表名。 ② 单击“选择列”域,该域中出现插入符。 ③ 如果该域中有星号,先用〈 Backspace 〉键或〈 Delete 〉键

将其删除。“选择列”域中可以含有一个星号或者一系列列名。 ④ 在对话框右侧的“列”下拉列表中选择一个列名。 MapInfo

将该列名复制到“选择列”域中。 ⑤ 如果希望查询中包含多个列,可以在“列”下拉式列表中

选择其它列名。在选择其它列名时, MapInfo 自动插入逗号以分隔列名。

3. 使用“ SQL 选择”对话框的“选择列”字段

使用“选择列”域来指定查询结果表中应该出现哪些列。若想结果表中含有与原始表相同的列集,在“选择列”域中输入一个星号( * )。

若想结果表中含有的列集与原始表不同,删除星号,并输入用逗号分隔的一系列列名或表达式,如下所述。“选择列”域可包含星号或一系列列表达式,但二者不可得兼。在填写“选择域”之前,请先填好“从表”域。

若查询涉及多个表,每个列名前必须加上表名,用句点分开表名和列名。这样,若你执行涉及两个表的查询,其中一个是“ Canada” 表,用户希望查询包括“ Canada” 表的“ Population” 列,则必须使用列表达式Canada.Population 。无论何时使用两个或多个表,“列”下拉式列表会自动将表名插入到列名前。

5.2.6 “5.2.6 “ 条件”字段条件”字段

1. 按行序连接表 若两个表没有公共列,还可以按照记录的顺序

进行表连接。若知道一个表的第一条记录对应于另一个表的第一条记录,或更一般地说,一个表的第 N 条记录对应于另一个表的第 N 条记录,就可以通过引用一个特殊的名为 RowID 的列将两个表连接。

RowID 列含有代表着表中每个记录的行号的整数。因此,任何表的第一条记录的 RowID 值为1 ,第二条记录的 RowID 值为 2 ,依此类推。

要连接两个表使得 MapInfo匹配两个表的第 N 条记录,指定一个如下形式的“条件”表达式。

条件: TABLE_1.RowID = TABLE_2.RowID

2. 按地理关系连接表 若两个表有图形对象, MapInfo 能根据那些对象之间的空间关系来连接表 。

图 5-10 对象包蕴关系

3. 连接两个或多个表 MapInfo 能利用该公共字段将两表连接。

表 5-1 Counties表

表 5-2 Orders 表

方法:

选择列: *

从表: Counties, Orders

条件:

Counties.CountyName

= Orders.County

表 5-1 Counties 表

CountyName Pop_1980 Pop_1990

Foster 23,789 27,135

Williamette 35,456 34,846

Mason 147,101 151,201

表 5-2 Orders 表

Order # Customer County

478001 Francis Foster

478002 James Foster

478003 Wickwire Mason

 

4. 执行子选择 MapInfo允许 SQL 选择中有子选择。子选

择是被放在“ SQL 选择”对话框中的“条件”域内的选择语句。

【例 5-9 】选择 states 中超过 4,000,000 人的所有城市。

选择列 * 从表 cities 条件obj within any(select obj from states

where Pop_1990 > 4000000)

5. 设置过滤规则 过滤条件是常用于比较列值与其它值的逻辑表

达式。例如,下面的过滤条件使用大于运算符( > )来检查 Order_Amount 列的值是否大于 100 。

“ 条件”: Order_Amount > 100 如果查询包括上述“条件”子句, MapInfo

只选择 Order_Amount 值大于 100 的行。 如果表达式被词 and 或 or隔开,“条件”子

域可包含两个或多个逻辑表达式。如果表达式被词and连接, MapInfo 只选择满足全部两个条件的行。如果表达式被词 or连接, MapInfo 选择满足任一条件的所有行。

6. 使用“ SQL 选择”对话框的“条件”字段

“ 条件”域有好几个作用。某些情况下,用户可能要使用一个条件表达式来过滤表,以便只看到那些满足一定准则的行。在其它情况下,可使用条件域来指定关系连接,从而查询能包括二个或多个表中的列。

注意:不能在“条件”域中使用聚合函数。

5.2.7 “5.2.7 “ 按列排序”字段按列排序”字段1. 选择升序或降序排序 缺省情形下 MapInfo 按升序对表进行排序。要将字段按降序排以使大数字排在小数字前,可以在“按列排序”域中将 desc放在列名字前。

【例 5-12 】查询 World 表时,以下的 Order By排序准则。按列排序: Population desc 将该表按 Population 字段进行降序排序。

选择列: * 从表: City_1K 按列排序 State, Population desc

2. 使用“按列排序”字段排序结果表 在“ SQL 选择”对话框中使用“按列排

序”域,可将结果表的记录排序。排序影响在浏览窗口中记录从上而下出现的顺序。

【例 5-13 】按照 State 列对 City_1K 表排序。 结果表按州名排序;但是,在 California

组内各行中,城市并未排序, San Francisco 出现在 Anaheim之上。要改正这一问题,可以在“按列排序”域中输入两个列名:

选择列:* 从表: City_1K 按列排序: State, City

5.2.8 “5.2.8 “ 按列分组”字段按列分组”字段1. 按列分组示例 【例 5-14 】设想有一个顾客订单表。该表中每一行表示单

个订单。表中一列包含订货销售代理的名字,另一列含有顾客名字,还有一列包含订货量。

对每个销售代理,可找出: ① 该代理的订单数目。 ② 该代理的平均订货量。 ③ 该代理的总订货量。 以下 SQL 选择查询产生所需结果: 选 择 列 Sales_Rep, count(*),

average(AMOUNT), sum(AMOUNT) 从表 Orders 按列分组 Sales_Rep

2. 使用“按列分组”字段分类汇总结果表 【例 5-15 】若有一个顾客数据库,并按州名列分组, MapInfo会

将所有得克萨斯州的顾客放入一组,所有加利福尼亚州的顾客放入另一组,等等。然后, MapInfo 计算每一组的聚合信息(总计、平均等)。

指定分类汇总标准: ① 在“按列分组”域中,输入 MapInfo 用于计算分类汇总的

列的列名或列号。 例如,若要按州总计顾客表,可输入表示顾客所在州的列的列

名(如 StateName )。 ② 在“选择列”域中,输入同一列名(如 StateName )。 ③ 在“选择列”域中,输入一个或多个运算符

( Sum 、 Count Avg 、 Min 或 Max )。请记住用逗号分隔开聚合运算符。

5.2.9 5.2.9 聚合函数聚合函数 MapInfo提供以下聚合函数: Count(*): 计算一组中记录总数。它简单地使用

* 作参数,因为它应用到整条记录,而非某个特定字段。

Sum( 表达式 ) :计算一组中所有记录的〈表达式〉总计值。

Avg( 表达式 ) :计算一组中所有记录的〈表达式〉平均值。

Max( 表达式 ) :找出一组中所有记录的〈表达式〉最大值。

Min( 表达式 ) :找出一组中所有记录的〈表达式〉最小值。

5.3 5.3 习题习题 5 5 一、 思考题1. 对象有哪几种形式 ? 并说明对象的特征。2. 说明“选择”查询与“ SQL” 查询的区别是什么?

3. 使用“ SQL” 选择的过程步骤是什么?4. 如何正确理解对象包蕴关系。二、上机练习1. 上机进行对象的查询,并显示查询结果。2. 上机分别练习“选择”查询与“ SQL” 查询这

两种查询方法。3. 上机完成本书中的“ SQL” 查询实例。

Recommended