第 3 章 查询与统计 查询与统计是常用的表操作。...

30
第 3 第 第第第 第第第 第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第 第第第第第第第第第第第第第第第第第第 第第第第第第第第第第 第第 一,一。 第第第第第第第 第第第第第第第第 ,。 第第第第第第第第第第第第第第 第第第第第第 第第第 第第第第第第第 ,,。

Upload: zelig

Post on 21-Jan-2016

123 views

Category:

Documents


0 download

DESCRIPTION

第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理, 需要采取一些有效的方法对文件中的记录重新组织,使其与希望中的顺序一致。 利用排序和索引,可以实现此目的。 本章主要介绍记录的排序与索引,记录的查询,数据统计和多表操作。. 3.1 排序. 【 命令格式 】SORT TO〈 文件名 〉ON〈 字段名 1〉[/A][/D][/C][ , 〈 字段名 2〉[/A][/D][/C] … ][ 范围 ][FIELDS〈 字段名表 〉][FOR/WHILE〈 条件 〉] - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

第 3 章 查询与统计

查询与统计是常用的表操作。记录在数据表文件中是按照物理顺序排列的,如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,需要采取一些有效的方法对文件中的记录重新组织,使其与希望中的顺序一致。利用排序和索引,可以实现此目的。本章主要介绍记录的排序与索引,记录的查询,数据统计和多表操作。

Page 2: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

3.1 排序【命令格式】 SORT TO 〈文件名〉 ON 〈字段名 1 〉

[/A][/D][/C][ ,〈字段名 2 〉 [/A][/D][/C]…][ 范围 ][FIELDS 〈字段名表〉 ][FOR/WHILE 〈条件〉 ]

【功能】对当前数据表中指定范围内满足条件的记录,按指定字段的升序或降序重新排列,并将排序后的记录按 FIELDS 子句指定的字段写入新的表文件中。

【说明】选项 A 为升序, D 为降序,若缺省 A 和 D ,则系统默认为升序。 C 为忽略大小写。排序后生成的新表文件是关闭的,使用时必须先打开。

Page 3: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

【例 3.1 】将 TEACHER 表记录按月收入升序排列,生成一个名为 ATEACHER 的表文件。按姓名降序排列,生成一个名为 BTEACHER 的表文件。USE TEACHERSORT TO ATEACHER ON 月收入 SORT TO BTEACHER ON 姓名 /D

Page 4: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

3.2 索引索引文件有两种类型:单索引文件( IDX )和

复合索引文件( CDX )可以为数据库表建立四种索引:主索引、候选

索引、唯一索引和普通索引。对于自由表,只可以建立和使用候选索引、唯一索引和普通索引。

Page 5: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

索引类型1. 主索引 : 主索引可确保索引关键字中输入值

的唯一性并确定记录的先后顺序。对于数据库中的每个表,只能建立一个主索引。

2. 候选索引 : 候选索引与主索引的要求和作用是一样的。“候选”的含义是它们在表中有资格被选为主索引,是主索引的候选者。对每个数据库表和自由表都可以建立多个候选索引。

Page 6: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

索引类型3. 唯一索引 :Visual FoxPro 为了保持同早期版本的兼

容性,还允许建立唯一索引。唯一索引允许表中索引关键字段存在重复值,但它只记录每个索引关键字值在表中的首次出现。

4. 普通索引 : 如果希望允许在索引关键字中出现重复值,可以使用普通索引。普通索引适合用在包含重复索引关键字值的表中逻辑排序记录和用于查询。在一个表中可以建立多个普通索引。

Page 7: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

建立索引1. 添加索引 : 若要添加一个新的索引,可以在

“表设计器”窗口中的“索引”选项卡中单击“插入”按钮,然后利用“索引”选项卡中的各输入框和按钮设置该索引。

2. 快速建立索引 : 可以在“表设计器”窗口中快速地建立索引。

Page 8: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

建立索引3. 索引命令 INDEX( 1 )单索引文件的建立【命令格式】 INDEX ON 〈索引表达式〉 TO 〈索引

文件名〉 [FOR 〈条件〉 ][UNIQUE] [ADDITIVE]( 2 )复合索引文件的建立【命令格式】 INDEX ON 〈索引表达式〉 TAG〈索引标识〉 [OF 〈复合索引文件名〉 ] [FOR 〈条件〉 ] [UNIQUE] [ASCENDING/DESCENDING] [ADDITIVE]

Page 9: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

【例 3.2 】以月收入为索引关键字对 TEACHER表建立单索引文件,索引文件名为 ITEACHER.IDX 。

USE TEACHERINDE ON 月收入 TO ITEACHERLIST

Page 10: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

【例 3.3 】为 TEACHER 表建立结构复合索引文件(系统自动生成索引文件名 TEACHER.CDX ),以姓名降序排列,索引标识为 XM;以年龄升序排列,索引标识为 NL 。

USE TEACHERINDE ON 姓名 TAG XM DESCLIST

Page 11: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

索引文件的打开一个数据表往往有多个索引,而在任意时刻只能有一

个索引是当前索引,称为主控索引。索引文件不能脱离所依赖的数据表文件而单独使用,在打开一个数据表文件时,结构化复合索引文件将随着数据表文件的打开而自动打开,如果要使用其他的索引文件,则要使用索引文件的打开命令。

【命令格式】 USE <表文件名 > [INDEX <索引文件名表 >]

【功能】打开数据表文件的同时打开由 INDEX 后面指定的各个索引文件。

Page 12: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

设置主控索引【命令格式】 SET ORDER TO [ 〈数值表达

式〉 / 〈单索引文件名〉 /[TAG〈索引标识〉 ][OF 〈复合索引文件名〉 ] [ASCENDING/DESCENDING]]

【功能】在打开的索引文件中指定主控索引文件或在打开的复合索引文件中设置主索引标识。

Page 13: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

重新索引对数据表进行修改、增加、删除等操作时,如

果没有打开相应的索引文件,则这些索引文件不会随着数据表文件的更新而自动更新,需要使用重新索引命令。

【命令格式】 REINDEX【功能】重新建立打开的索引文件。

Page 14: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

顺序查询1. LOCATE 命令【格式】 LOCATE [ 范围 ] FOR/WHILE 〈条

件〉【功能】在表中查找满足条件的记录。2. CONTINUE 命令【格式】 CONTINUE【功能】与 LOCATE 命令配合,用于继续查找

Page 15: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

【例 3.5】在 TEACHER 表中查找职称为副教授的记录。

USE TEACHERLOCATE FOR 职称 =“副教授”DISP如上例继续查找职称为副教授的记录:CONTINUEDISP

Page 16: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

索引查询1. FIND 命令【格式】 FIND 〈字符串〉 / 〈数字〉【功能】在索引文件中查找与索引关键字相匹配的数据记录。

2.SEEK命令【格式】 SEEK〈表达式〉【功能】与 FIND 功能相同,但允许用表达式

查找。在查找字符型数据时需加定界符。

Page 17: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

【例 3.6】用 FIND 命令在 TEACHER 表中查找姓马的记录。

USE TEACHERINDEX ON 姓名 TO ITEACHERFIND 马DISP

Page 18: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

【例 3.7】 SEEK命令的使用。USE TEACHERINDEX ON 姓名 TO ITEACHERSEEK 马 &&错误的命令(未加定界符) SEEK “马”DISPINDE ON 月收入 TO 2TEACHERSEEK 400+480DISPFIND 400+480 &&错误的命令(不能用表达式)

Page 19: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

数据统计与汇总1. 计数命令【格式】 COUNT [ 范围 ][FOR/WHILE 〈条

件〉 ] [TO 〈内存变量〉 ]【功能】统计满足条件的记录数。

Page 20: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

【例 3.8】分别统计 TEACHER 表中男、女教职工人数。

USE TEACHERCOUNT FOR 性别 ="男 " TO MENCOUNT FOR 性别 ="女 " TO WOMEN?" 男教工人数为: ",MEN?" 女教工人数为: " ,WOMEN?" 男女教工人数为: ",MEN+WOMEN

Page 21: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

2. 求和命令【格式】 SUM [ 数值型表达式表 ][ 范围 ][FOR

/WHILE 〈条件〉 ][TO 〈内存变量表〉 ]【功能】对当前表中的数值型字段的表达式求

和。【例 3.9】对 TEACHER 表中的月收入求和。USE TEACHERSUM 月收入

Page 22: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

3. 求平均数命令【格式】 AVERAGE [ 数值型表达式表 ][ 范围 ][FOR/W

HILE 〈条件〉 ][TO 〈内存变量表〉 ]【功能】对当前表中的数值型字段的表达式求平均数。【例 3.10】对 TEACHER 表中的月收入求平均数。USE TEACHERAVERAGE 月收入

Page 23: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

4. 计算命令【格式】 CALCULATE <表达式表 >[ 范围 ][FOR/WHI

LE <条件 >][TO <内存变量表 >]【功能】计算表达式的值。

【例 3.11 】计算 TEACHER 表的月收入平均数、合计数、最大值、最小值,并统计记录个数。

USE TEACHERCALCULATE AVG(月收入 ),SUM(月收入 ),CNT(),MAX(月收入 ),MIN(月收入 )

Page 24: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

数据表的汇总【格式】 TOTAL TO <文件名 > ON <关键字 >[ 范围 ] [FIELDS<N

型字段名表 >][FOR/WHILE<条件 >]【功能】在当前表中,对关键字相同的记录的数值型字段求和,并

将结果存入一个新表。【说明】在分组求和之前须按分组关键字段建立索引。【例 3.12 】对 TEACHER 表按教研室分组求和,将分组求和结果放

在 TEMP 中。USE TEACHERINDE ON 教研室 TO 3TEACHERTOTA TO TEMP ON 教研室USE TEMPLIST

Page 25: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

多表操作在 Visual FoxPro 中,一个工作区只能打开一个数据

表文件,如果在同一个工作区中打开了另一个数据表文件,则系统自动关闭前一个已打开的数据表文件。如果同时使用多个数据表文件,就需要在不同的工作区中分别打开,这就要通过选择工作区的命令来实现。 VFP 在内存中提供了 32767个工作区,工作区编号从 1到 32767。每个工作区只允许打开一个表,一个表只能在一个工作区打开。前 10个工作区除使用编号外,还依次使用了 A~J的工作区别名。

Page 26: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

1. 工作区的选择【命令格式】 SELECT < 工作区号 /别名 >【功能】选择指定的工作区为当前工作区。【说明】若指定工作区号为 0,则选择未被使用的最小工作区为当前工作区。【例 3.12 】在不同工作区中打开学生表、分数表和课程表,并分别为它们定义别

名。SELECT A &&选择 1号工作区为当前工作区USE 学生表 ALIAS XSB &&z在 1号工作区打开学生表并定义别名为 XSBLISTSELECT B &&选择 2号工作区为当前工作区USE 分数表 ALIAS FSBLISTSELECT 0 &&选择未用的最小工作区(第 3工作区)为当前工作区USE 课程表 ALIAS KCBLIST

Page 27: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

2. 工作区的互访【命令格式】工作区别名 . 字段名【功能】在当前工作区访问指定工作区打开表的字段。 【例 3.13 】在不同工作区分别打开学生表和分数表,在当前工作区访问其他工作区。

SELECT 1USE 学生表GO 3SELECT 2USE 分数表? 学号 &&显示当前工作区打开表当前记录的学号 结果显示: 2005032101?A.学号 &&显示指定工作区打开表当前记录的学号 结果显示: 2005032103

Page 28: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

关联的概念关联就是令在不同工作区打开表的记录指针建

立一种临时的联动关系,使一个表的记录指针移动时另一个表的记录指针能随之移动。

在关联的两个表中,当前表是主动表,称为父表,别名工作区中的表是被动表,称为子表。两个表必须有相同的字段才能建立两个表的关联,这个相同的字段称为关键字段。

Page 29: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

关联的种类有一一关系、一多关系、多一关系和多多关系。在关联的两个表中,若父表的一条记录对应子表的一条记录叫一一关系;若父表的一条记录对应子表的多条记录叫一多关系;若父表的多条记录对应子表的一条记录叫多一关系;若父表的多条记录对应子表的多条记录叫多多关系。

一一关系可以看作是一多关系或多一关系的一个特例,VFP 能够处理一多关系和多一关系,但不处理多多关系。

Page 30: 第 3 章 查询与统计 查询与统计是常用的表操作。 记录在数据表文件中是按照物理顺序排列的, 如果希望数据表文件中的数据记录按照某种固定次序来显示或处理,

建立关联的命令【命令格式】 SET RELATION TO 〈关键表达式〉 INTO 〈别名〉【功能】通过关键表达式将当前表和别名工作区表建立关联。【例 3.14 】将学生表与分数表建立关联后,显示学生的学号、姓

名、性别、班级、成绩等字段的内容。SELECT 2USE 学生表INDEX ON 学号 TO XHSELECT 1USE 分数表SET RELATION TO 学号 INTO BLIST 学号 ,B. 姓名 ,B. 性别 ,B.班级 ,课程编码 ,成绩