第5章数据排序、检索、统计和多表操作提要索引排序数据统计数据检索多表操作分类排序5.1分类排序数据表的排序就是把数据表中的记录按照某个或某些字段值的大小顺序重新排列,排列依据的字段称为关键字段,排序后生成一个新的表文件。命令格式:SORTTO新文件名ON字段1[/A]/[/D][/C][,字段2……][范围][FIELDS字段表]例1:对”学生.DBF”按入校分降序生成”入校总分.DBF”文件,且新表只包括学号姓名、入校总分三个字段。SORTTORXON入校总分/D5.2表的索引1.索引的概念(1)物理顺序(2)逻辑顺序(3)复合索引和单索引①复合索引(.CDX)②单索引文件(.IDX)逻辑索引记录地址学号姓名成绩A870005张三456B870002李四645C870001王五587D870004孙六676E870003钱七565主关键字(学号)记录地址870001C870002B870003E870004D870005A关键字学号与学生记录地址的对应表主文件索引表2.索引的建立INDEXON索引关键字表达式TO单索引文件名/TAG索引标识[FOR条件][COMPACT][ASCENDING/DESCENDING][UNIQUE/CANDIDATE][ADDITIVE](1)索引关键字:指明将要建立索引的字段(2)TO|TAG(3)COMPACT:指定单索引文件是否要压缩(4)UNIQUE|CANDIDATE:(唯一索引型)/(侯选索引)例1:对“学生.DBF”按入校总分降序建单索引文件.INDEON-入校总分TOXS1例2:对“学生.DBF”建立复合索引.(1)按姓名降序的普通索引,标识为XMINDEON姓名TAGXMDESC(2)按性别和入校总分升序的普通索引.标识XBZFINDEON性别+STR(入校总分,3)TAGXBZF3.索引文件的应用(1)打开或关闭索引文件并确定控制索引SETINDEXTO[索引文件表][ADDITIVE]USE文件名INDEX索引文件表(2)确定主控索引SETORDERTO[数值表达式|单索引文件名|[TAG]索引标识[ASCENDING|DESCENDING]].注:SETORDERTO或SETORDERTO0命令是取消索引文件及控制索引(3)删除索引文件或索引标识DELETETAGALL|索引标识1[,索引标识2](4)更新索引REINDEX(5)关闭索引SETINDEXTOCLOSEINDEXUSE5.3数据检索5.3.1.定位查询LOCATE[FOR条件]/[WHILE条件][范围]……CONTINUE[注意常用函数:FOUND();EOF()]例1:查找”学生.DBF”中姓名为李红的记录.LOCAFOR姓名=”李红”例2:在”学生.DBF”中查找入校总分大于580分的学生.5.3.2索引查询1.FIND命令命令格式:FIND字符常量/数值常量2.SEEK命令命令格式:SEEK表达式例1:查找姓名为”李红”的学生.USE学生INDEXMSEEK“李红”/FIND李红例2:查找入校总分是565的女生。SETORDERTO2SEEK“女”+STR(565,3)例3:查找入校总分280的记录。5.4数据统计1.计数命令COUNT[范围][FOR条件][TO内存变量]2.求和/求平均命令SUM/AVERAGE[数值表达式][范围][FOR条件][TO内存变量表/ARRAY数组]3.计算命令CALCULATE表达式[范围][FOR条件][TO内存变量表/ARRAY数组]AVG()CNT()MIN()MAX()SUM()4.分类汇总命令TOTALON关键字段名TO汇总文件名[范围][FOR条件][FIELDS字段名表]综合练习:对表学生成绩.DBF做如下操作(1)统计每个学生的平均分和总分.(2)输出最低平均分和最高总分.(3)统计总分220分以上的人数(4)追加一个记录,显示各科平均成绩。5.5多工作区的操作一.工作区选择与数据工作区1.工作区号VFP共提供了32767个工作区,编号从1—32767。在每个工作区中只允许打开一个库文件。2.工作区别名前十个工作区可以用A—J作为别名,11-32767别名为W11-W32767。USE表文件名[ALIAS别名]3.选择工作区SELECT工作区号/别名(区号:0--32767)5.5.1工作区的概念当访问其他工作区的数据时,字段名前面加别名。调用格式:工作区名-字段名(工作区名.字段名)或:别名-字段名(别名.字段名)例:查看学生的姓名、出生年月、物理、英语成绩。SELE1USE学生SELEBUSE学生成绩ALIASCJSELECTADISP姓名,出生年月,CJ.物理,B.英语(用LIST会怎样?)5.5.2表之间的关系1.表的关联两个表的记录指针之间建立一种临时的关系,当父表的记录指针移动时,子表的记录指针同步移动。关联的条件是首先为子表按关联的关键字建立索引,然后进行关联。VFP支持一对一、一对多、多对一的关系。2.用命令建立关联SETRELATIONTO[关联表达式1]INTO别名1[,关联表达式2]INTO别名2[,……][ADDITIVE]3.数据工作期窗口建立关联4.说明一对多关系的命令SETSKIPTO[别名1[,别名2]……]例:利用”学生.DBF”,”课程.DBF”,”选课.DBF”通过关联显示学生姓名,课程名,成绩三个字段。5.5.3表的更新【命令】UPDATEON关键字FROM别名REPLACE字段名1WITH表达式1[,字段名2WITH表达式2…][RANDOM]5.5.4表之间的连接将两个表的相关字段组合起来,构成一个新的表文件。其使用的语法为:JOINWITH工作区号/别名TO新表文件名FOR连接条件[FIELDS字段名表]例E2-24利用”学生.DBF”,”课程.DBF”,”选课.DBF”,通过连接生成由学号、姓名、课程名称、成绩四个字段组合的新表。欢迎提问!