1、第四讲 自由表(续)主要内容 n表的排序、索引和查寻n表的计算、汇总n多表间的基本操作1.排序与索引的概念n文件的物理顺序:数据在VFP表文件中存储的顺序。nSORT(排序):重排表文件的物理顺序,以便以希望的顺序相继访问数据。nINDEX(索引):建立一个包括一个或多个索引的分开文件,而表文件的物理顺序保持不变。其中,只有一个单个索引(主索引)决定记录访问的主要顺序。n排序是改变表物理顺序的过程,索引是排列其逻辑顺序的过程。3.表的索引n3.1 索引的类型与建立n索引文件的类型:.IDX的文件,即各索引文件只包含一个单个索引.CDX的文件,即复合索引文件,是在单个文件中包含多个索引。在一个复
2、合索引文件中的各个索引叫做索引标识。n结构复合索引文件,是一种为与活动表文件同名的文件,建立时只要设定Structural(选项)即可。n独立复合索引文件,是一种与打开的表文件不同名的.CDX文件,建立是只要不设定Structural选项即可。n使用索引文件,建议选择.CDX文件并设定Structural,不但查索速度加快,而且便于维护。n若建立暂时索引文件,可选.IDX文件。nINDEX命令建立索引文件的命令:格式1(建立.IDX索引文件):nINDEX ON TO UNIQUE|CANDIDATECOMPACTADDITIVE格式2(建立.CDX索引文件):nINDEX ON TAG OF
3、 UNIQUEDESCENDINGADDITIVEFORn功能:对当前表根据关键字表达式的值从小到大排列,并存入TO后指定的索引文件名的文件或复合索引文件的一个标识中。n说明:关键字表达式中不能混淆其他类型的项。一般将非字符型字段转换成字符型字段,然后用”+“或”-“进行连接。例如:INDEX ON 姓名+STR(ACCNO)+DTOS(TDate)TO SKEYn例4.18 使用INDEX命令建立不同的文件 USE Ffile EXCLUSIVE&独占状态打开表 INDEX ON 姓名 TAG SKEY OF X&索引标识加到指定的.CDX 文件 INDEX ON 姓名 TO SKEY&.I
4、DX文件被建立 INDEX ON 姓名 TAG SKEY&索引标识加到结构.CDX文件nVFP可以使用表设计器生成索引或者显示窗口中的属性按钮,显示工作区属性生成索引。主要内容 n表的排序、索引和查寻n表的计算、汇总n多表间的基本操作1.表的计算命令n1.1 计数命令CONUTn格式:COUNTFORWHILETONOOPTIMIZEn功能:统计当前表文件中符合条件的记录数。n例4.24 在Rfile表文件中,统计处工资大于12000的讲师的记录数,存M1中。USE Rfile COUNT FOR 职称=“讲师”.AND.工资12000.00 TO M1?M1 21.2 求和命令SUMn格式:
5、SUM数值TO|TO ARRAYFORWHILENOOPTIMIZEn功能:对当前表中选中记录的全部或指定的数值字段或由指定字段组成的数值表达式累加求和。n例4.25 求Ffile表文件中讲师的平均工资 USE Ffile SUM ALL 工资 TO G1 FOR 职称=“讲师”COUNT ALL FOR 职称=“讲师”TO N?G1/N1.3 求平均值命令AVERAGEn格式:AVERAGETO|TO ARRAYFORWHILENOOPTIMIZEn功能:对当前表中选中记录的全部或部分数值型字段及其组成的表达式求平均值并显示,且可存入内存变量名表或一维数组中。n例4.26 求Rfile表中讲
6、师的平均工资。USE Rfile AVERAGE ALL 工资 TO N1 FOR 职称=“讲师”2.表的汇总命令n实际运用中,常常需要将表的数值字段进行分类统计,比如宾馆的收银表管理中需要按楼层对房费、其他应收费和实际金额等字段汇总,且将汇总结果放到汇总表中。VFP提供了专门的汇总命令。n格式:TOTAL TO ON FIELDSFORWHILENOOPTIMIZEn功能:对当前表中选中记录的全部或部分数值型字段按关键字值相同的记录进行汇总,并将其结果放入指定的表文件中。n说明:使用TOTAL命令前必须对当前表按进行排序或者索引。n例4.27 对宾馆收银表SY,按楼层对其数值字段进行汇总。U
7、SE SY INDEX ON 楼层 TO SY1 SET INDEX TO SY1 LIST TOTAL ON 楼层 TO NSUM USE NSUM LIST主要内容 n表的排序、索引和查寻n表的计算、汇总n多表间的基本操作n对数据的组织和处理不是简单地将所有数据放在一个大的表中即可,而是为了避免数据的冗余,把大的表分为几个相互间具有联系的小的表。n存在多对多关系、多对一关系及其他关系n实现两个表之间的数据操作,需要在两个表之间建立关联(两个表的指针的逻辑关系)。n在实际的表系统中常常要管理多个表,所以在对多重表的操作中使用关联、连接、更新,设置和存储表之间的临时关系十分重要。1.关联n格式
8、1:SET RELATION TO|INTO ADDITIVEn格式2:SET RELATION TO|INTO,TO|INTOADDITIVEn功能:把当前工作区(主工作区)中的表文件与所指定的辅工作区中的表文件通过建立关联。n说明:命令中的 其值必须是两个表文件共有的字段,它是两个表文件建立关系的条件。命令中若使用关键字表达式,则表文件必须在该关键字表达式上建立索引文件并打开;若使用数值表达式,则两个表文件时按照记录号相关联的,这时表文件不用索引。n例题4.29 以记录号建立关联 SELE 1 USE STU1 SELE 2 USE STU2 SELE 1 SET RELATION TO
9、RECNO()INTO B CHANG FIELDS B-出生日期 FOR 体育=90.00&出生日期改76/06/06 SELE 2 DISPLAYn例题4.30 以数值表达式建立关联 SELE 1 USE STU1 SELE 2 USE STU2 INDEX ON 平均分 TO PJ SET INDEX TO PJ SELE 1 SET RELATION TO 平均分 INTO STU2 LIST 姓名,B-姓名n注意:如果STU2表中有两条及以上的记录的平均分相同,则两个工作区中显示的姓名内容有可能不一致。谢谢!人有了知识,就会具备各种分析能力,明辨是非的能力。所以我们要勤恳读书,广泛阅读,古人说“书中自有黄金屋。”通过阅读科技书籍,我们能丰富知识,培养逻辑思维能力;通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;通过阅读报刊,我们能增长见识,扩大自己的知识面。有许多书籍还能培养我们的道德情操,给我们巨大的精神力量,鼓舞我们前进。