1 / 24

第 5 章 空间数据查询

第 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 对象查询.

Download Presentation

第 5 章 空间数据查询

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第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

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

  3. 5.1.2 对象查询 图5-1 选择好记录的窗口 图5-3 查询结果浏览窗口 图5-2 “浏览表”对话框

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

  5. 5.2.1 通过“选择”来查询 图5-4 “查询”菜单 图5-5 “选择”对话框

  6. 1. 从表中选择记录 2. 满足条件 3. 存结果于表 4. 结果排序按列 5. 浏览结果 6. 保存模板 7. 载入模板 图5-6 “表达式”对话框

  7. 5.2.2 通过“选择SQL”查询 6. 结果放入表 7. 浏览结果 8. 使用下拉列表 9. 保存模板 10. 载入模板 1. 选择列 2. 从表 3. 条件 4. 按列分组 5. 按列排序 图5-7 “SQL选择”对话框

  8. 5.2.3 “SQL选择”的操作示例 例如:查询并显示出人口大于3000万的省份 图5-9 满足条件的浏览窗口 图5-11 不排序 图5-12 升序 图5-13 降序 图5-10 人口>3000万的省份单独显示

  9. 5.2.4 SQL选择 ① 打开希望查询的表(倘若尚未打开的话)。 ② 选择“查询”→“SQL选择”。 ③ 打开一个地图窗口或一个浏览窗口(若用户想看到查询结果)。 ④ MapInfo自动选中结果表中所有行。 ⑤ 若希望对查询表做一个永久拷贝,选择“文件”→“另存为”。

  10. 5.2.5 “选择列”字段 1. 计算派生列 “SQL选择”可以计算派生列并将其保存在结果表中。 【例5-1】显示一个进行加法运算的派生列表达式,它将两个数值型列相加。例中假设Purchase92和Purchase93都是数值型字段。 选择列:Purchase 92 Purchase 93

  11. 2. 选择显示在结果表中的列 结果表中只包括在“选择列”域中输入的一个或多个列。这一点在表中有许多列,而只希望使用其中少数列(可能是因为在屏幕上一次只能显示其中少数列)时很有用。 输入一系列列名: ① 在“从表”域中输入表名(若还未输入的话)。可以直接输入表名或是在“表”下拉式列表中选择表名。 ② 单击“选择列”域,该域中出现插入符。 ③ 如果该域中有星号,先用〈Backspace〉键或〈Delete〉键将其删除。“选择列”域中可以含有一个星号或者一系列列名。 ④ 在对话框右侧的“列”下拉列表中选择一个列名。MapInfo将该列名复制到“选择列”域中。 ⑤ 如果希望查询中包含多个列,可以在“列”下拉式列表中选择其它列名。在选择其它列名时,MapInfo自动插入逗号以分隔列名。

  12. 3. 使用“SQL选择”对话框的“选择列”字段 使用“选择列”域来指定查询结果表中应该出现哪些列。若想结果表中含有与原始表相同的列集,在“选择列”域中输入一个星号(*)。 若想结果表中含有的列集与原始表不同,删除星号,并输入用逗号分隔的一系列列名或表达式,如下所述。“选择列”域可包含星号或一系列列表达式,但二者不可得兼。在填写“选择域”之前,请先填好“从表”域。 若查询涉及多个表,每个列名前必须加上表名,用句点分开表名和列名。这样,若你执行涉及两个表的查询,其中一个是“Canada”表,用户希望查询包括“Canada”表的“Population”列,则必须使用列表达式Canada.Population。无论何时使用两个或多个表,“列”下拉式列表会自动将表名插入到列名前。

  13. 5.2.6 “条件”字段 1. 按行序连接表 若两个表没有公共列,还可以按照记录的顺序进行表连接。若知道一个表的第一条记录对应于另一个表的第一条记录,或更一般地说,一个表的第N条记录对应于另一个表的第N条记录,就可以通过引用一个特殊的名为RowID的列将两个表连接。 RowID列含有代表着表中每个记录的行号的整数。因此,任何表的第一条记录的RowID值为1,第二条记录的RowID值为2,依此类推。 要连接两个表使得MapInfo匹配两个表的第N条记录,指定一个如下形式的“条件”表达式。 条件: TABLE_1.RowID = TABLE_2.RowID

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

  15. Order # CountyName Pop_1980 Customer Pop_1990 County Foster 478001 23,789 Francis 27,135 Foster Williamette 478002 35,456 James 34,846 Foster 478003 Mason 147,101 Wickwire 151,201 Mason 表5-2 Orders表 表5-1 Counties表 3. 连接两个或多个表 MapInfo能利用该公共字段将两表连接。 表5-1 Counties表 方法: 选择列:* 从表:Counties, Orders 条件: Counties.CountyName = Orders.County 表5-2 Orders表

  16. 4. 执行子选择 MapInfo允许SQL选择中有子选择。子选择是被放在“SQL选择”对话框中的“条件”域内的选择语句。 【例5-9】选择states中超过4,000,000人的所有城市。 选择列* 从表 cities 条件 obj within any(select obj from states where Pop_1990 > 4000000)

  17. 5. 设置过滤规则 过滤条件是常用于比较列值与其它值的逻辑表达式。例如,下面的过滤条件使用大于运算符(>)来检查Order_Amount列的值是否大于100。 “条件”:Order_Amount > 100 如果查询包括上述“条件”子句,MapInfo只选择Order_Amount值大于100的行。 如果表达式被词and或or隔开,“条件”子域可包含两个或多个逻辑表达式。如果表达式被词and连接,MapInfo只选择满足全部两个条件的行。如果表达式被词or连接,MapInfo选择满足任一条件的所有行。

  18. 6. 使用“SQL选择”对话框的“条件”字段 “条件”域有好几个作用。某些情况下,用户可能要使用一个条件表达式来过滤表,以便只看到那些满足一定准则的行。在其它情况下,可使用条件域来指定关系连接,从而查询能包括二个或多个表中的列。 注意:不能在“条件”域中使用聚合函数。

  19. 5.2.7 “按列排序”字段 1. 选择升序或降序排序 缺省情形下MapInfo按升序对表进行排序。要将字段按降序排以使大数字排在小数字前,可以在“按列排序”域中将desc放在列名字前。 【例5-12】查询World表时,以下的Order By排序准则。按列排序:Population desc将该表按Population字段进行降序排序。 选择列: * 从表: City_1K 按列排序 State, Population desc

  20. 2. 使用“按列排序”字段排序结果表 在“SQL选择”对话框中使用“按列排序”域,可将结果表的记录排序。排序影响在浏览窗口中记录从上而下出现的顺序。 【例5-13】按照State列对City_1K表排序。 结果表按州名排序;但是,在California组内各行中,城市并未排序,San Francisco出现在Anaheim之上。要改正这一问题,可以在“按列排序”域中输入两个列名: 选择列: * 从表: City_1K 按列排序: State, City

  21. 5.2.8 “按列分组”字段 1. 按列分组示例 【例5-14】设想有一个顾客订单表。该表中每一行表示单个订单。表中一列包含订货销售代理的名字,另一列含有顾客名字,还有一列包含订货量。 对每个销售代理,可找出: ① 该代理的订单数目。 ② 该代理的平均订货量。 ③ 该代理的总订货量。 以下SQL选择查询产生所需结果: 选择列 Sales_Rep, count(*), average(AMOUNT), sum(AMOUNT) 从表 Orders 按列分组 Sales_Rep

  22. 2. 使用“按列分组”字段分类汇总结果表 【例5-15】若有一个顾客数据库,并按州名列分组,MapInfo会将所有得克萨斯州的顾客放入一组,所有加利福尼亚州的顾客放入另一组,等等。然后,MapInfo计算每一组的聚合信息(总计、平均等)。 指定分类汇总标准: ① 在“按列分组”域中,输入MapInfo用于计算分类汇总的列的列名或列号。 例如,若要按州总计顾客表,可输入表示顾客所在州的列的列名(如StateName)。 ② 在“选择列”域中,输入同一列名(如StateName)。 ③ 在“选择列”域中,输入一个或多个运算符(Sum、Count Avg、Min或Max)。请记住用逗号分隔开聚合运算符。

  23. 5.2.9 聚合函数 MapInfo提供以下聚合函数: Count(*):计算一组中记录总数。它简单地使用*作参数,因为它应用到整条记录,而非某个特定字段。 Sum(表达式):计算一组中所有记录的〈表达式〉总计值。 Avg(表达式):计算一组中所有记录的〈表达式〉平均值。 Max(表达式):找出一组中所有记录的〈表达式〉最大值。 Min(表达式):找出一组中所有记录的〈表达式〉最小值。

  24. 5.3 习题5 一、 思考题 1. 对象有哪几种形式?并说明对象的特征。 2. 说明“选择”查询与“SQL”查询的区别是什么? 3. 使用“SQL”选择的过程步骤是什么? 4. 如何正确理解对象包蕴关系。 二、上机练习 1. 上机进行对象的查询,并显示查询结果。 2. 上机分别练习“选择”查询与“SQL”查询这两种查询方法。 3. 上机完成本书中的“SQL”查询实例。

More Related