程序设计基础(vfp)第三章数据库表.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《程序设计基础(vfp)第三章数据库表.ppt》由会员分享,可在线阅读,更多相关《程序设计基础(vfp)第三章数据库表.ppt(79页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章 数据库和数据表的操作第二部分3.4 索引文件及其应用数据表中的顺序是按输入的顺序存储在表中。数据表中的顺序是按输入的顺序存储在表中。如果查找某条记录怎么办?如果查找某条记录怎么办?3.4.1索引文件及分类索引文件及分类1.索引文件索引文件索引文件:它仅由两个字段组成,一个字段是索引文件:它仅由两个字段组成,一个字段是排序的关键字值(也可以是一个表达式),另排序的关键字值(也可以是一个表达式),另一个字段是每个关键字在原始数据表中对应的一个字段是每个关键字在原始数据表中对应的记录号。例,在记录号。例,在Rsda.dbf数据表中,以编号为数据表中,以编号为关键字段并按升序建立的索引文件的示
2、意图如关键字段并按升序建立的索引文件的示意图如下图所示。下图所示。在索引文件中,记录是按索引关键字值的顺序排列的在索引文件中,记录是按索引关键字值的顺序排列的,当要查找某一编号的记录时,当要查找某一编号的记录时,VFP先在索引文件中查找先在索引文件中查找该编号,找到后再根据对应的记录号,在数据表中将记该编号,找到后再根据对应的记录号,在数据表中将记录指针快速移动到该记录上。录指针快速移动到该记录上。一个索引文件中可以只有一个索引,也可以有一个索引文件中可以只有一个索引,也可以有多个索引多个索引。可以包含多个索引的索引文件称该文件为复合索引文件。可以包含多个索引的索引文件称该文件为复合索引文件。
3、在复合索引文件中,需要为每个索引指定一个索引标识在复合索引文件中,需要为每个索引指定一个索引标识名,以便于通过索引标识相互区分各个索引。名,以便于通过索引标识相互区分各个索引。3.4.1索引文件及分类索引文件及分类2.索引的类型索引的类型(1)主索引主索引主索引通常是主索引通常是数据表的关键字索引数据表的关键字索引,作为主索引的,作为主索引的字段称为主关键字。主索引不能用在自由表中,而字段称为主关键字。主索引不能用在自由表中,而只能用在数据库表中,可用于在只能用在数据库表中,可用于在永久关系中建立参永久关系中建立参照完整性照完整性。创建主索引的字段。创建主索引的字段不允许有重复值不允许有重复值
4、,且,且一个表一个表只能有一个主索引只能有一个主索引。例如,在数据表中,常用学生证号、身份证号、工例如,在数据表中,常用学生证号、身份证号、工作证号等作为主索引,而姓名可能有同名的情况,作证号等作为主索引,而姓名可能有同名的情况,一般不能作为主索引。一般不能作为主索引。3.4.1索引文件及分类索引文件及分类(2)候选索引候选索引候选索引类似于主索引,候选索引类似于主索引,其索引值就不能有重复其索引值就不能有重复值。值。与主索引不同的是,与主索引不同的是,一个数据表中可以有多个候选一个数据表中可以有多个候选索引索引,而且侯选索引不能用来在永久关系中建立参,而且侯选索引不能用来在永久关系中建立参照
5、完整性。照完整性。(3)惟一索引惟一索引惟一索引表示索引值只能取一个,如果有两个或两惟一索引表示索引值只能取一个,如果有两个或两个以上的索引值,则只能取其中一个,因此,惟一个以上的索引值,则只能取其中一个,因此,惟一索引使用时可能会隐藏一些记录。例如,若有两个索引使用时可能会隐藏一些记录。例如,若有两个同名的人员,将姓名字段作为惟一索引,则只能找同名的人员,将姓名字段作为惟一索引,则只能找到一个记录,另一个记录将不会找到。到一个记录,另一个记录将不会找到。3.4.1索引文件及分类索引文件及分类(4)普通索引普通索引普通索引没有上面各索引的限制,是普通索引没有上面各索引的限制,是允许重复索引值的
6、允许重复索引值的索引索引。作为普通索引的字段,其字段值可以重复,。作为普通索引的字段,其字段值可以重复,也可也可以作为排序的依据以作为排序的依据,但因为可能有多个相同的索引值,但因为可能有多个相同的索引值,因此查询时会找到多个符合条件的记录。一个数据表中因此查询时会找到多个符合条件的记录。一个数据表中可以有可以有多个多个普通索引。普通索引。3.4.1 索引文件及分类索引文件及分类3.索引文件的分类索引文件的分类单入口索引文件单入口索引文件(扩展名为(扩展名为.IDX)(IDX索引文索引文件中只包含一个索引件中只包含一个索引)复合索引文件复合索引文件(扩展名(扩展名.CDX),),.CDX索引文
7、索引文件中可以包含有一个或多个索引,所以称为复件中可以包含有一个或多个索引,所以称为复合索引文件。合索引文件。结构化复合索引文件结构化复合索引文件非结构化复合索引文件非结构化复合索引文件(独立符合索引文件独立符合索引文件)结构化复合索引结构化复合索引的主文件名与数据表的的主文件名与数据表的主文件名相同,并随着数据表的打开而主文件名相同,并随着数据表的打开而打开,在添加、更改或删除记录时会自打开,在添加、更改或删除记录时会自动进行维护;动进行维护;非结构化复合索引文件非结构化复合索引文件(独立符合索引文独立符合索引文件件)的主文件名与数据表文件不同,必须的主文件名与数据表文件不同,必须用命令打开
8、。用命令打开。3.4.2创建索引文件创建索引文件1.建立结构化复合索引文件建立结构化复合索引文件(1)在表设计器中创建索引文件在表设计器中创建索引文件(2)命令方式创建索引命令方式创建索引【格式格式】INDEX ON 表达式 TAG 索引标识名 FOR 条件表达式 ASCENDING|DESCENDING UNIQUE|CANDIDATEADDITIVE【功能功能】建立结构化复合索引文件。建立结构化复合索引文件。对对rsda表(表(1)按编号升序建立索引;()按编号升序建立索引;(2)按工作日期降序;()按工作日期降序;(3)先)先按按性别性别升序升序,若性别相同,则按,若性别相同,则按工作日
9、期工作日期升序建立索引(升序建立索引(rsda.cdx)USErsdaINDEXON编号编号TAGbhINDEXON工作日期工作日期TAGgzrqdescINDEXON性别性别+dtoc(工作日期工作日期)TAGxbrq2.建立独立复合索引文件建立独立复合索引文件独立复合索引文件的扩展名也是独立复合索引文件的扩展名也是.CDX,但其但其主文件名与数据表文件名主文件名与数据表文件名不相同,且不相同,且使用时还需使用时还需单独打开单独打开。独立复合索引文件。独立复合索引文件主要用来创建那些使用不太频繁的索引。主要用来创建那些使用不太频繁的索引。独立复合索引文件不能在表设计器中创建,独立复合索引文件
10、不能在表设计器中创建,命令建立。命令建立。【格式格式】INDEX ON 表达式TAG 索引标识名 OF独立复合索引文件名独立复合索引文件名 FOR 条件表达式 ASCENDING|DESCENDING UNIQUE|CANDIDATEADDITIVE例:对例:对rsgl.dbf表,(表,(1)编号升序建立索引;)编号升序建立索引;(2)先按)先按性别性别升序升序,若性别相同,则按,若性别相同,则按工作日工作日期期升序建立独立索引文件升序建立独立索引文件gl.cdxusersglindexon编号编号tagbhcandofgl.cdxindexon性别性别+dtoc(出生日期出生日期)tagxb
11、csrqofgl.cdx3.重新建立索引文件重新建立索引文件在数据表的使用过程中,当增删记录或数据表中被在数据表的使用过程中,当增删记录或数据表中被索引文件使用的关键字段改动时,索引文件使用的关键字段改动时,结构化复合索引结构化复合索引会随着数据表的打开自动打开并能及时得到更新会随着数据表的打开自动打开并能及时得到更新,但如果在使用数据表时未打开相应的独立复合索引但如果在使用数据表时未打开相应的独立复合索引文件或传统的单入口文件或传统的单入口.IDX索引文件,则索引文件会因索引文件,则索引文件会因为无法及时更新而产生错误索引。这时须打开索引为无法及时更新而产生错误索引。这时须打开索引文件,并对
12、其重新索引。文件,并对其重新索引。菜单方式:菜单方式:打开数据表打开数据表“显示显示”“浏览浏览”,菜单,菜单“表表”、“重重建建立索引建建立索引”命令,或打开数据表后用命令,或打开数据表后用REINDEX命令命令重新建立索引。重新建立索引。命令方式命令方式【格式格式】REINDEX4、索引的删除若单索引:直接在windows中删除若复合索引,删除索引标识删除所有的索引标识:Delete tag all删除特指的索引标识Delete tag,3.4.3索引文件的使用索引文件的使用1.指定主控索引指定主控索引一个数据表可以建立一个数据表可以建立多个索引文件多个索引文件,每个索引,每个索引文件中又
13、可能包含文件中又可能包含多个索引多个索引,而一种索引就是,而一种索引就是一种排序方式一种排序方式在使用索引时,必须指明哪一个索引是对数据在使用索引时,必须指明哪一个索引是对数据表记录排序起作用的,即指定主控索引。表记录排序起作用的,即指定主控索引。在没有指定哪一个索引为主控索引之前,数据在没有指定哪一个索引为主控索引之前,数据表的表的访问顺序访问顺序仍然是原来的物理顺序,即按记仍然是原来的物理顺序,即按记录号的顺序访问。录号的顺序访问。主控索引和主索引有什么区别?主控索引和主索引有什么区别?主控索引和主索引是完全不同的概念。主主控索引和主索引是完全不同的概念。主索引是用来控制数据的完整性的,而
14、主控索引是用来控制数据的完整性的,而主控索引是用来指定目前记录排列顺序的。索引是用来指定目前记录排列顺序的。1.指定主控索引(1)(1)指定结构化复合索引文件中的索引为主控索引指定结构化复合索引文件中的索引为主控索引指定结构化复合索引文件中的索引为主控索引指定结构化复合索引文件中的索引为主控索引菜单方式:菜单方式:“浏览浏览”“表表”“属性属性”命令命令-即弹出即弹出“工作区工作区属性属性”对话框对话框设定主控索引后,利用设定主控索引后,利用LIST、DISPLAY命令输出命令输出的记录顺序也是排序后的顺序。的记录顺序也是排序后的顺序。主控索引只是改变了记录的输出顺序,记录在数主控索引只是改变
15、了记录的输出顺序,记录在数据库中的顺序并没有发生变化。据库中的顺序并没有发生变化。命令方式命令方式【格式一格式一】USE 数据表名 ORDER TAG ASCENDING|DESCENDING【功能功能】打开表,同时指定结构化复合索引文件的索引为主打开表,同时指定结构化复合索引文件的索引为主控索引。控索引。【格式二格式二】SET ORDER TO TAG ASCENDING|DESCENDING【功能功能】打开表后,指定结构化复合索引文件的索引为主控打开表后,指定结构化复合索引文件的索引为主控索引。索引。(2)(2)指定独立复合索引文件中的索引为主控索引指定独立复合索引文件中的索引为主控索引指
16、定独立复合索引文件中的索引为主控索引指定独立复合索引文件中的索引为主控索引对于独立的复合索引文件或单入口的索引文件,需要用对于独立的复合索引文件或单入口的索引文件,需要用命令将其打开和关闭,只有打开要使用的独立复合索引命令将其打开和关闭,只有打开要使用的独立复合索引文件后,才能指定其中的索引为主控索引。文件后,才能指定其中的索引为主控索引。【格式一格式一】USE ORDER TAG OF ASCENDING|DESCENDING【格式二格式二】SET INDEX TO TAG OF(4)关闭索引文件【格式一】SET INDEX TO【格式二】CLOSE INDEX2.使用索引快速查找记录FIN
17、D命令和命令和SEEK命令都可在指定主控命令都可在指定主控索引的情况下进行记录的查找操作。索引的情况下进行记录的查找操作。SEEK表达式表达式USERsdaORDERTAGbh&打开打开Rsda同时同时指定指定BH为主控索引为主控索引SEEK03002dispSETORDERTOgzrq&重新指定重新指定rq为主控为主控索引索引seek1963/09/02&日期格式要与设置相同,否则会出错日期格式要与设置相同,否则会出错dispUsersdasetordertobh3.5 数据表的统计计算3.5.1 累加求和及求平均值对每个记录的对每个记录的横向求和横向求和和统计可以用前面介绍的操和统计可以用
18、前面介绍的操作或命令方便地给出,如作或命令方便地给出,如REPLACE命令。对于每个命令。对于每个记录的记录的纵向求和纵向求和统计可以用统计可以用累加求和累加求和命令实现。命令实现。【格式格式】SUM|AVERAGE 表达式表范围 FOR 条件表达式 TO 内存变量名表|TO 数组变量名【例例】求出求出Rsgz.dbf中计算机系所有职工的月基中计算机系所有职工的月基本工资平均值及全年实发工资之和并显示。本工资平均值及全年实发工资之和并显示。AVERAGE基本工资基本工资TOaFORSUBSTR(编号编号,1,2)=03SUM实发工资实发工资*12TObFORSUBSTR(编号编号,1,2)=0
19、3“【例例】求出求出xscj每门课的平均成绩,每个每门课的平均成绩,每个同学的平均成绩和总成绩。同学的平均成绩和总成绩。usexscj.dbfbrowaverage英语英语,数学数学,计算机计算机toa,b,c?a,b,creplall总成绩总成绩with英语英语+数学数学+计算机,计算机,平均成绩平均成绩with总成绩总成绩/33.5.2统计记录个数统计记录个数【格式格式】COUNT范围范围FOR条件表达式条件表达式WHILE条件表达式条件表达式TO内存变量名表内存变量名表|TO数组变量名数组变量名例:统计每门课成绩均在例:统计每门课成绩均在90分以上的人数,以及不及格分以上的人数,以及不及
20、格的人数。的人数。countfor英语英语=90and数学数学=90and计算机计算机=90tos1countfor英语英语60or数学数学60or计算机计算机60tos2?S1,s23.5.3分类汇总分类汇总分类汇总对已经建立了索引并且指定了主控索引的数据表,分类汇总对已经建立了索引并且指定了主控索引的数据表,可以按关键字进行分类求和可以按关键字进行分类求和【格式格式】TOTALON关键字表达式关键字表达式TO新表名新表名FIELDS字段名表字段名表范围范围FOR条件表达式条件表达式WHILE条件表达式条件表达式2当前数据表必须是按关键字表达式索引过,并当前数据表必须是按关键字表达式索引过,
21、并指定该索引为主控索引,以保证具有相同关键字值的记指定该索引为主控索引,以保证具有相同关键字值的记录能连续访问。录能连续访问。FIELDS短语给出了需分类求和的字段名,这些字段短语给出了需分类求和的字段名,这些字段只能是数值型或货币型的,如果缺省,则对当前表中的只能是数值型或货币型的,如果缺省,则对当前表中的所有数值型或货币型字段分类求和。不管选不选所有数值型或货币型字段分类求和。不管选不选FIELDS短语,新表与当前表的结构是一样的。短语,新表与当前表的结构是一样的。对当前数据表中的若干个关键字表达式相同的记录,对当前数据表中的若干个关键字表达式相同的记录,生成新表中的一条记录。这条记录的非
22、数值型或非货币生成新表中的一条记录。这条记录的非数值型或非货币型字段取自关键字相同的一组记录中首记录的相应字段,型字段取自关键字相同的一组记录中首记录的相应字段,参加求和的字段值取自求和结果。参加求和的字段值取自求和结果。例题(1)统计本月每种商品的台数和总价,以及统计本月每种商品的台数和总价,以及每个售货员销售的台数和总价每个售货员销售的台数和总价例题USExs.dbfbrowreplall总价总价with单价单价*台数台数indexon售货员售货员toshytotalon售货员售货员toshytjfields台数台数,总价总价indexon商品名商品名tospmtotalon商品名商品名t
23、osptjfields台数台数,总价总价useshytjbrowusesptjbrow(2)统计每天的销售台数和总价,以及本月统计每天的销售台数和总价,以及本月每天每个售货员的销售台数和总价。每天每个售货员的销售台数和总价。Indexon日期日期tagrqTotalon日期日期torqtjfields台数台数,总价总价Indexon日期日期+售货员售货员tagrqshyTotalon日期日期+售货员售货员torqshtjfields台台数数,总价总价3.6 数据交换3.6.1 数组与数据表的数据交换1.将数据表中的记录数据保存到数组中将数据表中的记录数据保存到数组中【格式一格式一】SCATTE
24、RFIELDS字段名表字段名表MEMOTO数组名数组名【格式二格式二】COPYTOARRAY数组名数组名FIELDS字段名表字段名表范围范围FOR逻辑逻辑表达式表达式【功能功能】将当前打开的数据表中的某些记将当前打开的数据表中的某些记录数据存储在数组中。录数据存储在数组中。2.将数组中的数据传递到当前数据表中将数组中的数据传递到当前数据表中【格式一格式一】GATHERFROM数组名数组名FIELDS字段名表字段名表MEMO【格式二格式二】APPENDFROMARRAY数组名数组名FOR逻辑表达式逻辑表达式FIELDS字段名表字段名表【功能功能】将数组中各元素的数据传递给当前打开将数组中各元素的
25、数据传递给当前打开的数据表中。的数据表中。注意:请读者将注意:请读者将COPYTOARRAY与与SCATTER、APPENDFROMARRAY与与GATHERFROM的差的差别搞清楚。别搞清楚。例:将第例:将第1条记录与第条记录与第4条记录互换条记录互换go1Scattertoa&把第一条记录存到变量把第一条记录存到变量a中中go4Scattertob&把第四条记录存到变量把第四条记录存到变量b中中go1gatherfromb&把把b中存的第中存的第4条记录复制到条记录复制到第第1条记录条记录go4gatherfroma&把把a中存的第中存的第1条记录复制到第条记录复制到第4条记录条记录例:将
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础 vfp 第三 数据库
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内