《VFP第8部分(排序索引及多表操作)解析课件.ppt》由会员分享,可在线阅读,更多相关《VFP第8部分(排序索引及多表操作)解析课件.ppt(55页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据表的分类排序数据表的分类排序 命令格式命令格式sorttoon/a/d/c产生的表是关闭的产生的表是关闭的(教科书(教科书P73)分类排序有什么缺点数据表的索引排序数据表的索引排序 索引是按索引关键字表达式的值索引是按索引关键字表达式的值使数据表中的记录有序排列的一种使数据表中的记录有序排列的一种技术,在技术,在Visual FoxProVisual FoxPro系统中是借系统中是借助于助于索引文件索引文件实现的。实现的。1 1、什么是索引、什么是索引索引关键字的值、记录号(教科书(教科书P74)Visual Visual FoxProFoxPro系系统统提提供供了了四四种种不不同同的的索
2、索引引类类型型,它它们们分别是:分别是:2 2、索引的类型、索引的类型主主索索引引:仅适用于数据库表,不允许关键字段有重复值,一个数据表只能建一个主索引。候候选选索索引引:不允许索引关键字段有重复值普通索引普通索引:最常用的索引类型,无任何限制 唯一索引唯一索引:允许索引关键字段有重复值 Visual FoxProVisual FoxPro系统支持单系统支持单索引文件(索引文件(.idxidx)和复合索和复合索引文件(引文件(.cdxcdx)。)。3 3、索引文件的类型、索引文件的类型 (1 1)单索引文件(略)单索引文件(略)单索引文件是每个索引存放在一单索引文件是每个索引存放在一个独立的文
3、件(个独立的文件(.idxidx)中。中。(2 2)结构化复合索引文件)结构化复合索引文件 结构化复合索引文件(结构化复合索引文件(.cdxcdx)可以可以在同一个文件中包含多个索引,其中在同一个文件中包含多个索引,其中每个索引称为每个索引称为索引标识索引标识。更重要的是,对于结构复合索引,更重要的是,对于结构复合索引,无论何时打开表文件,该索引都会无论何时打开表文件,该索引都会自动打开。自动打开。其文件名与表名相同其文件名与表名相同,一个表文件一个表文件只产生一个结构化复合索引文件只产生一个结构化复合索引文件。(3 3)独立复合索引文件(略)独立复合索引文件(略)4 4、索引的建立、索引的建
4、立(教科书(教科书P75)Indexontagascending|descending自动产生与表同名的.CDX文件结构化复合索引文件的建立结构化复合索引文件的建立(命令方式命令方式)特别注意:特别注意:建立索引时,当建立索引时,当涉及到两个或两个以上的不涉及到两个或两个以上的不同类型的字段时:同类型的字段时:1)顺序若相同,则将非字符型转换)顺序若相同,则将非字符型转换为字符型,然后用为字符型,然后用“+”连接成一连接成一个字符表达式。个字符表达式。2)顺序若不同,则以字符型字段)顺序若不同,则以字符型字段的顺序为准,的顺序为准,若数字型字段的顺若数字型字段的顺序与字符型不同,则用一个较大序
5、与字符型不同,则用一个较大数减去该字段,再转化为字符型数减去该字段,再转化为字符型;若日期型字段的顺序与字符型不若日期型字段的顺序与字符型不同,则用一个较大的日期减去该同,则用一个较大的日期减去该字段,再转化为字符型字段,再转化为字符型,然后用,然后用“+”连接成一个字符表达式。连接成一个字符表达式。【例例】就学生表建立结构复合索引文件,其中就学生表建立结构复合索引文件,其中包含包含2 2个索引:个索引:(1 1)按学号的升序排列,编号相同的记录只显)按学号的升序排列,编号相同的记录只显示第一条。示第一条。(2 2)先按性别升序,性别相同再按入学成绩降)先按性别升序,性别相同再按入学成绩降序排
6、列。序排列。USE USE 学生学生 INDEX ON INDEX ON 学号学号 TAG sy1 TAG sy1 UNIQUEUNIQUE INDEX ON INDEX ON 性别性别+STR(1000-+STR(1000-入学成绩入学成绩)TAG sy2)TAG sy2在表设计器中建立索引在表设计器中建立索引表表设计器中的设计器中的“索引索引”选项卡选项卡5 5、索引的使用、索引的使用 一个表文件可以建立多个索引,一个表文件可以建立多个索引,在操作中可以同时打开多个索引,在操作中可以同时打开多个索引,但是但是任何时候只有一个索引起作用任何时候只有一个索引起作用。索引依赖于表文件而存在索引依
7、赖于表文件而存在,它,它随表的关闭而自动关闭。随表的关闭而自动关闭。当前起作用的索引标识称为主控当前起作用的索引标识称为主控索引索引。要使用索引必须满足以下条件:要使用索引必须满足以下条件:打开表;打开表;确定主控索引;确定主控索引;setordertotag(1)确定主控索引)确定主控索引命令格式:命令格式:(教科书(教科书P77)(2)删除索引)删除索引deletetagall|(3)索引更新)索引更新自动更新自动更新 使用索引文件后,虽然表中各记录的物理顺序并使用索引文件后,虽然表中各记录的物理顺序并未改变。但未改变。但记录指针不再按物理顺序移动,而是按主记录指针不再按物理顺序移动,而是
8、按主控索引文件中记录的逻辑顺序移动控索引文件中记录的逻辑顺序移动,于是整个表中的,于是整个表中的记录是按索引关键表达式值排序的效果。记录是按索引关键表达式值排序的效果。使用索引文件时,还要特别注意以下几点:使用索引文件时,还要特别注意以下几点:(1 1)在使用)在使用GOGO命令时,命令时,GO GO 使记录指针使记录指针指向具体的物理记录号,而与索引无关,而指向具体的物理记录号,而与索引无关,而GO GO TOP|BOTTOMTOP|BOTTOM将使记录指针指向逻辑首或逻辑尾记录,将使记录指针指向逻辑首或逻辑尾记录,这时这时GO TOPGO TOP不再等同于不再等同于GO 1GO 1。(2
9、2)SKIPSKIP命令按逻辑顺序移动记录指针。命令按逻辑顺序移动记录指针。(3 3)表被打开后,记录指针位于)表被打开后,记录指针位于TOPTOP位置位置。【例例】当索引起作用时,分析记录指针的移动当索引起作用时,分析记录指针的移动规律。规律。USE USE 学生学生 INDEX ON INDEX ON 入学成绩入学成绩 TAG sy3TAG sy3 GO 6 GO 6?RECNO(),?RECNO(),姓名姓名&显示显示6 6 李勤奋李勤奋 SKIPSKIP?RECNO(),?RECNO(),姓名姓名&显示显示5 5 欧阳天地欧阳天地复合结构索引文件的类型名称是复合结构索引文件的类型名称是
10、()A)PJTB)PRGC)CDXD)MEM不允许字段值出现重复的索引是(不允许字段值出现重复的索引是()。)。A)侯选索引和主索引)侯选索引和主索引B)普通索引和惟一索引)普通索引和惟一索引C)惟一索引和主索引)惟一索引和主索引D)惟一索引)惟一索引自由表gz.dbf有姓名/C/8、出生年月/D、基本工资/N/6/2等字段,要建立以“姓名、基本工资”两字段的组合索引,其索引关键字表达式是()。(A)姓名+基本工资 (B)“姓名”+“基本工资”(C)“姓名”+基本工资 (D)姓名+str(基本工资,6,2)有数据表文件有数据表文件CJ.DBF,按姓名,按姓名(C,8)的升序,上的升序,上机成绩
11、机成绩(N,6,2)的降序建立索引,正确的命令是(的降序建立索引,正确的命令是()。)。A.INDEXON姓名姓名-上机成绩上机成绩TAGCJIDXB.INDEXON姓名姓名+STR(-上机成绩,上机成绩,6,2)TAGCJIDXC.INDEXON姓名姓名+STR(1000-上机成绩)上机成绩)TAGCJIDXD.INDEXON姓名姓名/A,上机成绩,上机成绩/DTAGCJIDX某数据表有字段:学号某数据表有字段:学号/C、生日、生日/D、成绩、成绩/N等。要建立学号、成绩、生日的组合索引,其等。要建立学号、成绩、生日的组合索引,其索引关键字表达式是(索引关键字表达式是()。)。A)学号)学号
12、+成绩成绩+生日生日B)学号学号+成绩成绩+生日生日C)学号)学号+STR(成绩成绩,5,1)+STR(生日生日,8)D)学号)学号+STR(成绩成绩,5,1)+DTOC(生日生日,1)多表操作多表操作 若要使用多个表,就要使用多个若要使用多个表,就要使用多个工作区。一个工作区是一个编号区工作区。一个工作区是一个编号区域,它标识一个已打开的表。域,它标识一个已打开的表。在应在应用程序中通常通过使用用程序中通常通过使用工作区号工作区号和和工作区别名工作区别名来标识。来标识。(教科书(教科书P82)1 1、工作区号、工作区号 Visual Visual foxProfoxPro提供了提供了3276
13、732767个个工作区,编号从工作区,编号从1 1到到3276732767。每个工作区只允许打开一个表,每个工作区只允许打开一个表,一个表只能在一个工作区打开,系一个表只能在一个工作区打开,系统默认的工作区为统默认的工作区为1 1号工作区。号工作区。2 2、别名、别名(1 1)前十个工作区除了可用)前十个工作区除了可用1 11010来标来标识外,还可用识外,还可用A AJ J来表示来表示工作区的别名工作区的别名。(2 2)定义别名)定义别名use use alias alias 格式:格式:3 3、选择当前工作区、选择当前工作区select|如没有给表定义别名,如没有给表定义别名,则可以用数据
14、表名作则可以用数据表名作为别名。为别名。selesele 0 0 表示选定当前未使用的最表示选定当前未使用的最小号工作区。小号工作区。use use in in|不改变当前工作区不改变当前工作区【例例】在不同的工作区分别打开学生在不同的工作区分别打开学生.dbf.dbf、选课、选课.dbf.dbf和课程和课程.dbf 3.dbf 3个表,命令序列如下:个表,命令序列如下:CLOSE ALL&CLOSE ALL&关闭所有打开的文件关闭所有打开的文件 SELECT 2SELECT 2 USE USE 学生学生&选择选择2 2号工作区打开学生表号工作区打开学生表 SELECT CSELECT C U
15、SE USE 课程课程&选择选择3 3号工作区打开课程表号工作区打开课程表 USE USE 选课选课 IN 5&IN 5&选择选择5 5号工作区打开选课表号工作区打开选课表引用非当前工作区表的字段必须引用非当前工作区表的字段必须冠以别名,引用格式为:冠以别名,引用格式为:别名别名.字段名字段名别名别名-字段名字段名【例例】在在1 1号工作区打开学生表,在号工作区打开学生表,在2 2号工作区号工作区打开选课表;当前工作区为打开选课表;当前工作区为1 1号,显示选课表号,显示选课表中当前记录的学号、姓名、课程号和成绩字段中当前记录的学号、姓名、课程号和成绩字段的值。的值。命令序列如下:命令序列如下
16、:CLOSE ALL&CLOSE ALL&关闭所有打开的文件关闭所有打开的文件 SELECT 1SELECT 1 USE USE 学生学生&选择选择1 1号工作区打开学生表号工作区打开学生表 USE USE 选课选课 IN 2&IN 2&在在2 2号工作区打开选课表,当前号工作区打开选课表,当前工作区为工作区为1 1号号?学号学号,姓名姓名,选课选课.课程号课程号,选课选课-成绩成绩 学生管理数据库中的表学生管理数据库中的表 bofbof():文件开始的测试函数:文件开始的测试函数 eofeof():文件结束的测试函数:文件结束的测试函数 recnorecno():返回当前记录号:返回当前记录
17、号 selesele()():返回当前工作区区号:返回当前工作区区号 4 4、工作区常用函数、工作区常用函数建立表间的关联关系建立表间的关联关系(临时关系)(临时关系)要在两个或两个以上的表之要在两个或两个以上的表之间进行数据操作时,通常有间进行数据操作时,通常有关关联和连接联和连接两种方法。两种方法。1 1、关联的概念、关联的概念 每个工作区打开的表中都存在一每个工作区打开的表中都存在一个记录指针,指针指向的记录是当个记录指针,指针指向的记录是当前记录,如果表之间没有关系,则前记录,如果表之间没有关系,则各个表的记录指针各个表的记录指针相互独立相互独立,即当,即当前工作区指针移动时,其他工作
18、区前工作区指针移动时,其他工作区的指针不移动。的指针不移动。所谓关联,就是让不同工作区数据表的所谓关联,就是让不同工作区数据表的记录指针建立一种临时的联动关系。使记录指针建立一种临时的联动关系。使一个表的记录指针移动时,能带动另一一个表的记录指针移动时,能带动另一个表的记录指针按一定的条件作相应地个表的记录指针按一定的条件作相应地移动。移动。前者称为关联表(主动表、父表)前者称为关联表(主动表、父表),后者称为被关联表(被动表、子表),后者称为被关联表(被动表、子表)关键字为唯一值关键字为唯一值 关键字为唯一值关键字为唯一值 一一关键字为重复值关键字为重复值 关键字为唯一值关键字为唯一值 多一
19、关键字为唯一值关键字为唯一值 关键字为重复值关键字为重复值 一多关键字为重复值关键字为重复值 关键字为重复值关键字为重复值 多多父表父表子表子表主动被动建立表间的关联建立表间的关联 建立数据库文件中表间关联,建立数据库文件中表间关联,一是要保证建立关系的表具有相同一是要保证建立关系的表具有相同的的字段值(关键字值)字段值(关键字值);二是子表要以该字段建立二是子表要以该字段建立索引索引。建立两个表之间的建立两个表之间的“一对一一对一”和和“多对一多对一”关联的步骤:关联的步骤:找到两个表中能够建立关联的字找到两个表中能够建立关联的字段(段(字段名可以不同,类型、宽度、字段名可以不同,类型、宽度
20、、小数位数必须相同小数位数必须相同)根据关键字值确定父表,再确定根据关键字值确定父表,再确定子表;子表;先打开子表,建立索引;先打开子表,建立索引;最后打开父表建立关联。最后打开父表建立关联。有重复值为父表set set relarela to to 1 into into 1,into into N additiveadditive说明:说明:发出关联命令所在工作区的发出关联命令所在工作区的表是父表表是父表建立关联的命令建立关联的命令(教科书(教科书P83)子表必须对关联字段索引子表必须对关联字段索引 是关联的关键字是关联的关键字 不同名的字段只要类型和数值相同也不同名的字段只要类型和数值相
21、同也可建立关联可建立关联。关联后,父表指针移动带动子表指针关联后,父表指针移动带动子表指针移动;而移动;而如果当前工作区是子表,其指如果当前工作区是子表,其指针移动,父表指针不会移动针移动,父表指针不会移动。实验指导书实验指导书P35实验实验15任务任务1(1)additive additive 一般用于三个或三个以上的一般用于三个或三个以上的表之间建立多重关联,第表之间建立多重关联,第2 2、33个关联使用个关联使用该选项。该选项。关联后,当前工作区字段名可以直接使用,关联后,当前工作区字段名可以直接使用,子表的字段在使用时要加子表的字段在使用时要加“别名别名.字段名字段名”。set set
22、 relarela to to recn()+Nrecn()+N into into 把记把记录号作关键字建立关联录号作关键字建立关联。关闭或重新打开数据表,关联就会消失。关闭或重新打开数据表,关联就会消失。(故称为(故称为临时关系临时关系)BB AASele1UseAAindeon字段字段tagzdSele2UseBBSetrelato字段字段intoA(或或AA或或1)字段字段Sele0UseAAindeon字段字段tagzdSele0UseBBSetrelato字段字段intoAAAABBCC或或AABBAACC字段字段1字段字段2字段字段13个表个表建建关联关联?字段字段2(见教科书第
23、(见教科书第84页例页例4.22)set skip to set skip to ,2 一般不用用在用在setrelation命令之后命令之后,说明已建说明已建关联的性质为一多关系。关联的性质为一多关系。建立表间的一对多关系建立表间的一对多关系原则:原则:一般建立一般建立“多对一多对一”或或“一一对一对一”的关联;的关联;一般如果要求显示的结果是按一般如果要求显示的结果是按照某个字段值的顺序排列,则包含照某个字段值的顺序排列,则包含该字段的表应作父表。该字段的表应作父表。例:在学生表和选课表中,显示成绩80分的学生的学号、姓名、所学课程的课程号和成绩。学生管理数据库中的表学生管理数据库中的表s
24、etsafetyoff closeall clear select1 use学生学生aliasxs indexon学号学号tagxh select2 use选课选课 setrelationto学号学号intoxs 系统环境设置表环境设置listfor成绩成绩80 fields学号学号,xs.姓名姓名,课程课程号号,成绩成绩closeall setsafetyon cancel 数据处理恢复系统环境 主索引与永久关系主索引与永久关系有些数据表格和其他数据表格之有些数据表格和其他数据表格之间存在着某些间存在着某些关系关系,我们需要将这些,我们需要将这些有关系的数据表格纳入同一个数据库有关系的数据表
25、格纳入同一个数据库中,并建立其彼此之间的关系,使用中,并建立其彼此之间的关系,使用者才能更好的运用数据表格,更容易者才能更好的运用数据表格,更容易达到数据管理的目的。达到数据管理的目的。1 1)主索引的建立)主索引的建立 注意:只能为注意:只能为数据库表数据库表建立主索建立主索引,不能为自由表创建主索引。引,不能为自由表创建主索引。当从数据库中移走有主索引的表当从数据库中移走有主索引的表而成为自由表时,他们的主关键而成为自由表时,他们的主关键字将会随之消失。字将会随之消失。2 2)永久关系和临时关系)永久关系和临时关系 永久性关系建立在数据库本身,永久性关系建立在数据库本身,只要数据库存在,永
26、久关系就存只要数据库存在,永久关系就存在,不会因其他命令的执行而消在,不会因其他命令的执行而消失失。在在“数据库设计器数据库设计器”窗口中,两窗口中,两个数据表格之间的连线,就是个数据表格之间的连线,就是“永永久性关系久性关系”。(见教科书(见教科书9090页图页图5.35.3)字段之间的关系(不管是永久字段之间的关系(不管是永久性的还是临时性的),都是要靠性的还是临时性的),都是要靠索索引引来达成的,也就是说,某个字段来达成的,也就是说,某个字段欲建立关系,需先以此字段的内容欲建立关系,需先以此字段的内容建立索引,再利用此索引建立关系。建立索引,再利用此索引建立关系。表表之间的关系之间的关系
27、注意:建立注意:建立“永久性关系永久性关系”的的父表父表必须以关键字建立必须以关键字建立主索引或侯选索主索引或侯选索引引,而子表则可以以关键字建立任,而子表则可以以关键字建立任意类型的索引(一对一或一对多)。意类型的索引(一对一或一对多)。而建立而建立“临时关系临时关系”的父表可的父表可以不需建立索引,只需子表以关键以不需建立索引,只需子表以关键字建立任意类型的索引即可(一对字建立任意类型的索引即可(一对一或多对一)一或多对一)。永久关系连线的作用是在数据永久关系连线的作用是在数据表格作表格作“更新更新”、“删除删除”、“新增新增”等动作时,对表格做一个等动作时,对表格做一个检查的动作,以符合
28、某些规则。检查的动作,以符合某些规则。(而存储这些规则的地方就是所(而存储这些规则的地方就是所谓的谓的“参考完整性参考完整性”(RI)(RI)。)。)在数据库中的表建立永久关在数据库中的表建立永久关系后,可以设置管理相关记录的系后,可以设置管理相关记录的规则。这些规则可以控制相关表规则。这些规则可以控制相关表中记录的中记录的插入、删除或更新插入、删除或更新操作操作。见书见书P91P91表表5.5 5.5 设置参照完整性设置参照完整性(见教科书(见教科书90-9190-91页)页)数据库表之间创建的永久关系保存数据库表之间创建的永久关系保存在(在()中。)中。A)数据库表)数据库表B)数据库)数
29、据库C)表设计器)表设计器D)数据环境设计)数据环境设计器器命令命令SELECT0的功能是(的功能是()A)随机选择一个空闲工作区)随机选择一个空闲工作区B)选择区号最大的空闲工作区)选择区号最大的空闲工作区C)选择当前工作区号加)选择当前工作区号加1的工作区的工作区D)选择区号最小的空闲工作区)选择区号最小的空闲工作区建立两个数据库表的永久关系,要求建立两个数据库表的永久关系,要求()A)两个表都必须索引)两个表都必须索引B)两个表都不要索引)两个表都不要索引C)只有父表必须索引,子表可以不需)只有父表必须索引,子表可以不需要索引要索引D)只有子表必须索引,父表可以不需)只有子表必须索引,父
30、表可以不需要索引要索引下列叙述中,正确的是(下列叙述中,正确的是()。)。A)一个工作区中只能打开一个表文件,打)一个工作区中只能打开一个表文件,打开新的表文件后,原来所打开的表文件自动开新的表文件后,原来所打开的表文件自动关闭关闭B)一个表文件可以在不同的工作区同时打)一个表文件可以在不同的工作区同时打开,并且表别名也相同开,并且表别名也相同C)一个工作区中可以同时打开多个表文件)一个工作区中可以同时打开多个表文件D)命令)命令USE可以关闭所有工作区打开的表可以关闭所有工作区打开的表文件文件Use关闭当前工作区的数据表关闭当前工作区的数据表Clearall关闭所有工作区的数据关闭所有工作区的数据表,清除内存变量,并将当前工表,清除内存变量,并将当前工作区置为作区置为1号工作区号工作区Closeall关闭所有文件关闭所有文件职工工资数据表按基本工资字段建立降序职工工资数据表按基本工资字段建立降序索引,然后执行索引,然后执行GOTOP命令,此时当前命令,此时当前记录指针指向的记录是(记录指针指向的记录是()。)。A)1号记录号记录B)基本工资最少的记录)基本工资最少的记录C)基本工资最多的记录)基本工资最多的记录D)不能确定)不能确定