您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > 第六章索引排序与统计
第六章索引、排序与统计教学内容:前一次课我们讲了表的创建,然而在表里有多种对表的不同操作,比如排序、查找等一些命令操作。今天我们讲第5章:索引、排序与统计:6.1表的排序(一)什么是排序:对表记录的顺序做物理调整,并生成新表.(二)命令:格式:SORTTO新表文件名ON排序字段名1[/A][/D][/C][,排序字段名2][/A][/D]…][范围][FOR条件][FIELDS字段名表]说明:(1)排序的结果放入产生的新表文件,记录号发生变化。(2)排序字段(有的书称关键字),可以是C、N、D型。C型,英文按字母、汉字按拼音顺序。(3)[/A]—升序,[/D]—降序,[/C]—英文不分大小写,缺省—升序。(4)可先按字段名1(关键字1)排序,若相同再按字段名2(关键字2)排序。示例:USE学生表SORTTOSTUDENT1ON班级,姓名/DUSESTUDENT1LISTUSE学生表SORTTO学生表_金融ON学号FOR班级=“金融二”USE学生表_金融LIST6.2索引的基本概念6.2.1什么是索引:索引实际上是一种排序,但是它不改变表中数据的物理顺序,而是另外建立一个记录号列表。即对表记录的顺序做逻辑调整.在VisualFoxPro系统中,可以为一个表建立多个索引,每一个索引确定了一种表记录的逻辑顺序。注意:一张数据表和它的索引是存放在两个文件里.索引文件是不可视的.包含了索引关键字(即此据建立索引的字段)和记录号两部分.6.2.2索引类型VisualFoxPro系统提供了四种不同的索引类型,它们分别是:1.主索引2.候选索引23.普通索引4.唯一索引6.3创建索引(一)使用命令创建索引:IndexOn索引表达式To索引文件名/Tag索引名[For条件表达式][Ascending][Descending][Unique][Candidate](后选)(二)利用表设计器创建索引的操作步骤示例1:USE学生表INDEXON姓名TAG姓名LISTUSE学生表INDEXON班级+性别TAG班级_性别OF学生表_班级性别LISTINDEXON班级TAG班级OF学生表_班级性别LIST6.4索引的使用6.4.1使用索引排序一.打开索引文件1.与表同名的结构索引在打开表时同时打开2.非结构索引文件的打开:Setindexto索引文件二.设置当前索引项setordertotag索引名6.4.2索引其他操作1.更新2.删除3.关闭6.4.3几个查询命令1.locate格式:LOCATE[范围]FOR条件[WHILE条件]说明:(1)找到后指针指向该记录,用DISP显示。未找到,指向末记录后。文件打开表的名字显示表设计器索引索引名索引类型索引表达式保存3(2)适用于表文件。索引文件也是顺序查找(速度慢)。(3)若满足条件的记录有多个,CONTINUE命令指针指向下一个。(4)[范围]缺省=ALL示例1:在“STUDENT.DBF”中查找姓名未周莉的记录。(教材P91例5-7)2.seek格式:SEEK表达式[ORDER索引号/IDX索引文件名/[TAG]标识名[OFCDX文件名][ASCENDING/DESCENDING]]说明:(1)功能与FIND相同(2)字符串必需用定界符,字符串变量不用”&”。(3)查找的是表达式。示例:USE学生表INDEX学生表_班级_学号seek“金融二”+“99020202”DISPSETINDEXTO学生表_姓名SEEK“章闻天”DISPXM=“王平”SEEKXMDISP6.5统计计算与多表操作6.5.1统计计算1.count/sum格式:COUNT[范围][FOR条件][WHILE条件][TO内存变量名]说明:(1)[范围]缺省=所有记录(2)[TO内存变量]指统计结果放入一内存变量中。例:USE学生表COUNTFOR班级=“注会”TOAA?AACOUNTTOBB?BB格式:SUM[字段表达式表][范围][TO内存变量名表/TOARRAY数组名][FOR条件][WHILE条件]说明:(1)[范围]缺省=所有记录(2)[表达式]指数值型字段及其组合。(3)[表达式]缺省对所有数值型字段求和。例:usestudsum数学tols&&所有同学数学总分4?ls89782.Average格式:AVERAGE[表达式表][范围][TO内存变量名表/TOARRAY数组名][FOR条件][WHILE条件]说明:与SUM一样。示例:USE分数LISTAVERAGE成绩FOR学号=“99010301”TOCJPJ?CJPJ3.Caculate格式:CALCULATE表达式列表[范围][FOR逻辑表达式1][WHILE逻辑表达式2][TO内存变量列表|TOARRAY数组名]说明:(1)表达式列表:指定表达式,表达式可以包含下列函数的任意组合:AVG(),CNT(),MAX(),MIN(n),SUM(n),VAR(n)。(2)范围:指定计算中所使用记录的范围。范围子句有:ALL,NEXTn,RECORDn和REST。示例:教材P95例5-124.Total格式:TOTALON分类关键字TO表文件名[FIELDS字段名表][范围][FOR条件]说明:(1)命令前需对分类关键字进行INDEX排序。(2)求和结果存入一新表文件。(3)[FIELDS字段名表]求和的数值型字段,“FIELDS”不能省,该项缺省对所有数值型字段求和。(4)不求和的数值型字段在新表中保留前面记录的值。(5)新表字段宽度与原表一样(需求和的字段应设计宽点,否则“*”号溢出)。例:一商店今天批发销售的流水帐xs1.dbf,求每种商品销售了多少台,多少钱。usexs1list记录号货名单价数量总价114寸彩电120022400212寸黑白4001400318寸彩电220012200412寸黑白40031200518寸彩电220024400618寸彩电220012200714寸彩电120012400indexon货名toxs11totalon货名toqh1fields数量,总价useqh15list记录号货名单价数量总价112寸黑白40041600214寸彩电120033600318寸彩电220048800注:单价未求和,保留前面字段值。6.5.2工作区(一)工作的选择①工作区是在内存中打开表文件所开辟的区域。②一个工作区只能打开一个表文件。③一个表文件只能在一个工作区打开。④工作区编号1、2、3….10对应工作区别名A、B、C…J。⑤未选择工作区时,默认在1区打开表文件6.5.3表的关联和连接.(一)关联:并未形成新的表,只是在两表中形成一种联系格式:SETRELATIONTO[关键字表达式1/数值表达式1INTO工作区号/别名[,关键字表达式2/数值表达式2INTO工作区号/别名…][ADDITIVE]]说明:1)关键字表达式的值必须是相关联的两个表文件共同具有的字段,别名表文件必须已经按关键字表达式建立了索引文件并处于打开状态。2)当两个表文件建立关联后,当前表文件的记录指针移到某一记录时,被关联的表文件的记录指针也自动指向关键字值相同的记录上。如果被关联的表文件具有多个关键字值相同的记录,则指针只指向关键字值相同的第一条记录。如果被关联的表文件中没有找到匹配的记录,指针指向文件尾,即函数EOF()的值为.T.。3)如果命令中使用了数值表达式,则两个表文件按照记录号进行关联,这时别名表文件可以不用建立相关的索引文件。4)当别名表文件中有多个关键字值相同的记录时,别名表文件的指针只能指向关键字值相同的第一条记录上,如果需要找到关键字值相同的多个记录,可以使用下面的命令:SETSKIPTO[别名1[,别名2]…]5)如果需要切断当前数据表与特定数据表之间的关联,可以使用命令:SETRELATIONOFFINTO工作区号/别名(二)连接:将两个表按照一定的条件组合,形成新的表格式:JOINWITH工作区号/别名TO新表文件名[FIELDS字段名表]FOR连接条件说明:①指针指向当前表第一记录,找别名表符合条件的一条记录生成新表中的第一条记录,依次进行。②若别名表中有n条记录符合条件,当前表中有m条记录,新表生成m×n条记录。③条件中的别名表字段名用联防标识。
本文标题:第六章索引排序与统计
链接地址:https://www.777doc.com/doc-2160058 .html