索引与查询.docx
- 文档编号:11914674
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:49
- 大小:52.69KB
索引与查询.docx
《索引与查询.docx》由会员分享,可在线阅读,更多相关《索引与查询.docx(49页珍藏版)》请在冰豆网上搜索。
索引与查询
章节
第四章索引与查询
教学
目的
要求
通过对第四章的学习,使学生能够使用命令对表进行排序,包括使用单关键字排序和组合关键字排序,掌握使用表设计器和命令来建立索引,使用索引,掌握各种类型索引的区别,会使用SEEK命令查询,会通过索引来给两个表建立永久性联系和临时性联系。
教学
重点
难点
教学重点:
1.使用表设计器建立索引。
2.掌握命令建立单独、结构复合、独立复合索引,使用索引,设置当前索引。
3.给两个表建立永久性联系。
教学难点:
1.使用命令建立索引。
2.用命令来使用索引,设置当前索引。
拟留
作业
与
实训
作业:
1.使用命令进行单关键字排序。
2.用命令进行组合关键字排序。
3.使用表设计器建立各种类型的字段索引和字段表达式索引。
4.使用命令建立单独索引文件。
5.使用命令建立结构复合、独立复合索引文件。
6.给表建立永久性联系。
实训:
完成实训大纲中实训项目五
小结
通过本章学习:
1.学生在理论上掌握了各种类型索引的基本知识,包括主索引、候选索引、普通索引和惟一索引;
2.会使用命令建立各种类型索引文件,包括单独索引、结构复合索引和单独复合索引;
3.掌握了给两个表建立永久性联系。
教学主要内容
教学方法
时间分配
【学习目标】
知识点:
1.使用SORT命令给表按单关键字建立排序。
2.使用SORT命令给表按组合关键字建立排序。
3.使用SORT命令给表建立选择性排序。
4.使用表设计器为表建立索引。
●技能点:
1.使用SORT命令给表按单关键字建立排序。
2.使用SORT命令给表按组合关键字建立排序。
3.使用SORT命令给表建立选择性排序。
4.使用表设计器为表建立索引。
第一节数据表的排序
当浏览数据表中的记录时,往往希望记录按特定的顺序显示。
比方说,要求要求按学号的顺序来排序、按成绩值由高到低排序等。
又例如在制作标签时,经常希望所产生的标签是按邮政编码排序。
然而由于在记录输入时,根本就是随即进行的,因此表中记录的顺序往往都需要随时调整。
我们一般把这种随即记录的顺序叫做自然顺序。
排序操作的结果是创建一个新的数据表文件,这个新文件可以与原来的表文件大小、内容完全一样,但是其中数据记录的排序顺序,却是按您的要求重新整理过的。
为了实现这个目的,系统必须先创建一个临时文件,并在临时文件中重组记录,然后再将排序过的记录复制到一个新文件,最后删除临时文件。
因为操作复杂,当数据表比较大时,将会感到排序速度很慢;同时创建排序需要的磁盘空间也很大,操作过程中占据的存储空间是原来文件的3倍,完成操作后也是原文件的两倍。
一、单关键字排序
命令语法
SORTTOTableName
ONFieldName1[/A][/D][/C]
[,FieldName2[/A][/D][/C]…]
[ASCENDING|DESCENDING]
[Scope][FORlExpression]
[FIELDSFidldNameList]
上述语句的作用是将当前表按字段FieldName的值排序,并生成一个新的数据表文件(类型为.dbf)。
默认按递增方式排序,参数/A指定按递增方式排序,参数/D指定按递减方式排序:
这两个参数不能同时使用。
至于参数/C则表示排序时字母数据“不区分大小写”。
例如,
将表学生中的数据记录以“学号”字段为关键字段递增排序,并将排序后的结果存入表TEST1.dbf中。
OPENDATABASE学生管理
USE学生
SORTTOTEST1ON学号
USETEST1
BROWSE
例如,
将表学生中的记录以“性别”为关键字段进行递减排序,并将排序后的结果存入表TEST1.dbf中。
OPENDATABASE学生管理
USE学生
SORTTOTEST2ON性别/D
USETEST2
BROWSE
二、组合关键字排序
在前面的例子中,都是以单个字段作为关键字进行排序。
实际上也会常常遇到需要用多个字段作为关键字段排序的情况。
例如,
将表学生中的记录以“性别”字段为第一级关键字,按递增顺序(即男性在前女性在后);若遇到性别值相同的记录时,则以“院系”字段为第二级关键字,按递增顺序;若还有院系又相同的记录,则以“姓名”字段为第三级关键字,按递增顺序(即汉语拼音的顺序)。
并将排序后的结果存入TES3.dbf中。
OPENDATABASE学生管理
USE学生
SORTTOTEST3ON性别,院系,姓名
USETEST3
BROWSE
例如,
如果把顺序全部改为递减顺序,并将排序后的结果存入表TEST4.dbf中。
OPENDATABASE学生管理
USE学生
SORTTOTEST4ON性别/D,院系/D,姓名/D
USETEST4
BROWSE
例如,
将表学生中的记录,以“性别”字段为第一级关键字进行递减排序(即女性在前);若性别相同,则以“院系”字段为第二级关键字作递增排序;若院系又相同,则以“姓名”字段为第三级关键字作递减排序,并将排序后的结果存入表TEST4.dbf中。
OPENDATABASE学生管理
USE学生
SORTTOTEST4ON性别/D,院系,姓名/D
USETEST4
BROWSE
在这里要注意的是,参数/A、/D的作用是针对某一级关键字的。
当我们希望排序方式对当前所有关键字有效时,可以在排序命令中增加参数ASCENDING(递增)或DESCENDING(递减)实现。
三、选择性排序
⏹排序范围选择
利用排序语句中的SORT子句,我们可以指定当前数据表内参加排序的记录范围。
默认的排序范围是ALL(全部记录)。
假设我们要将学生表中前5条记录以“性别”为关键字作递增排序,输入下列命令:
OPENDATABASE学生管理
USE学生
SORTTOTEST5ON性别NEXT5
USETEST5
BROWSE
⏹排序条件选择
在SORT语句中加入FORlExpression子句,可以指定所给范围内记录的排序条件。
例如,我们希望将学生中,出生日期大于1985年1月1日的记录以“姓名”为关键字作递减排序,并将排序后的结果存入表TEST6.dbf中,请输入下列命令:
OPENDATABASE学生管理
USE学生
SORTTOTEST6ON姓名FOR出生日期>{^1985/01/01}
USETEST6
BROWSE
显然,利用FORlExpression参数我们可以筛选掉不希望排序的数据记录。
⏹排序字段选择
在默认状态下,SORT语句会将当前表中所有的字段都复制到新表中。
如果添加FIELDSFieldNameList子句,则可以限定新表中的字段。
参数FieldNameList是字段名序列,多个字段名之间请用逗号分隔。
例如,
OPENDATABASE学生管理
USE学生
SORTTOTEST7ON出生日期FIELDS姓名,出生日期,院系
USETEST7
BROWSE
第二节数据表的索引
索引是由指针构成的文件,这些指针逻辑上按照索引关键字值进行排序。
索引文件和表的.dbf文件分别存储,并且不改变表中记录的物理顺序。
实际上,创建索引是创建一个由指向.dbf文件记录的指针构成的文件。
若要根据特定顺序处理表记录,可以选择一个相应的索引,使用索引还可以加速对表的查询操作。
可以在表设计器中定义索引,VisualFoxPro中的索引分为主索引、候选索引、唯一索引和普通索引四种。
一、索引的类型
⏹主索引
在指定字段或表达式中不允许出现重复值的索引,这样的索引可以起到主关键字的作用,它强调的“不允许出现重复值”是指建立索引的字段值不允许重复。
如果在任何已含有重复数据的字段中建立主索引,VisualFoxPro将产生错误信息,如果一定要在这样的字段上建立主索引,则必须首先删除重复的字段值。
建立主索引的字段可以看作是主关键字,一个表只能有一个主关键字,所以一个表只能创建一个主索引,而且只有数据库表能够创建主索引,自由表是不能创建主索引的。
主索引可确保字段中输入值的唯一性并决定了处理记录的顺序。
可以为数据库中的每一个表建立一个主索引。
如果某个表己经有了一个主索引,还可以为它添加候选索引。
比方说,由于每一个人的身份证号码绝对不应当相同,因此用户可以将身份证号码字段指定为主索引。
若是在创建此主索引时,VisualFoxPro提示违反惟一性,则说明数据表中身份证号码字段值有彼此重复的错误。
创建主索引后,添加记录的身份证号码字段值,或是某条记录身份证号码字段的修改值,若与其他记录的身份证号码值相同的话,VisualFoxPro将会发生错误信息,并取消该操作。
⏹候选索引
候选索引和主索引具有相同的特性,建立候选索引的字段可以看作是候选关键字,所以一个表可以建立多个候选索引。
候选索引像主索引一样要求字段值的唯一性并决定了处理记录的顺序。
在数据库表和自由表中均可为每个表建立多个候选索引。
比方说,学生基本数据表包含身份证号码与学号这两个字段,而每一位学生的这两条数据都不是重复的。
若已经指定身份证号码字段为主索引,则可以指定学号字段为候选索引。
⏹唯一索引
唯一索引是为了保持同早期版本的兼容性,它的“唯一性”是指索引项的唯一,而不是字段值的唯一。
它以指定字段的首次出现值为基础,选定一组记录,并对记录进行排序。
在一个表中可以建立多个唯一索引(学号(3个no1=>一条记录))。
⏹普通索引
普通索引也可以决定记录的处理顺序,它不仅允许字段中出现重复值,并且索引项中也允许出现重复值。
在一个表中可以建立多个普通索引。
从以上定义可以看出,主索引和候选索引具有相同的功能,除具有按升序或降序索引的功能外,都还具有关键字的特性,建立主索引或候选索引的字段值可以保证唯一性,它拒绝重复的字段值。
唯一索引和普通索引分别与以前版本的索引含义相同,它们只起到索引排序的作用。
这里特别要注意唯一索引的含义,唯一索引与字段值的唯一性无关,即建立了唯一索引的字段,它的字段值是可以重复的,它的“唯一”是指在使用相应的索引时,重复的索引字段值只有唯—一个值出现在索引项中。
二、使用表设计器创建索引
⏹单字段索引
在表设计器界面中有“字段”、“索引”和“表”三个选项卡,在“字段”选项卡中定义字段时就可以直接指定某些字段是否是索引项,用鼠标单台定义索引的下拉列表框可以看到有三个选项:
无、升序和降序(默认是无)。
如果选定了升序或降序,则在对应的字段上建立了一个普通索引,索引名与字段名同名,索引表达式就是对应的字段.
如果要将索引定义为其他类型的索引,则须将界面切换到“索引”选项卡,然后从“类型”下拉列表框中选择索引的类型。
这时可以根据需要选择主索引、候选索引或唯一索引。
例如,
给学生表建立索引,索引名和索引表达式都是姓名,索引类型是普通索引。
步骤:
1、打开学生管理数据库设计器。
2、选定要创建索引的表,并打开其表设计器对话框。
3、选择预定字段,然后打开“索引”栏的下拉列表框,选择排序的方式,假定选取“升序”选项。
至此,单字段索引已经创建,但是这时系统默认所创建的索引是一个普通索引。
如果想要创建其他类型的索引,必须切换到“索引”选项卡下修改。
10分钟
(详讲)
20分钟
(详讲)
20分钟
(详讲)
30分钟
(详讲)
20分钟
(详讲)
教学主要内容
教学方法
时间分配
【学习目标】
l知识点:
1.掌握各种类型索引文件。
2.会使用INDEX命令建立各种类型索引文件。
3.会设置、取消、删除当前索引。
●技能点:
1.会使用INDEX命令建立各种类型的索引文件。
2.会打开所以文件,设置当前索引。
3.会取消当前索引,删除索引标识。
三、索引文件的类型
前面曾经提到过,索引文件是独立于数据表.DBF文件的文件。
在VFP中常见的索引有单独索引和复合索引,(.IDX)文件是单独索引文件,一个文件中只能包含一个索引项;(.CDX)文件是复合索引文件,一个文件中可以包含多个索引项。
索引项的数量仅受可使用内存及磁盘空间的限制。
复合索引文件分为“结构复合索引”和“独立符合索引”。
以下是这两种索引文件的说明:
⏹结构复合索引文件
1、一个数据表只能有一个结构复合索引文件,并且永远与数据表文件有相同的文件名,只是扩展名为.CDX。
在结构复合索引文件中可以包含多个索引项,每个索引项都有一个名称,我们叫做索引标识(TAG)。
2、打开数据表时,其结构复合索引文件会同时自动打开(若存在的话)。
而关闭数据表时,其结构复合索引文件也会同时关闭。
因此当我们更新表中的数据时,索引文件中的相关数据也会随之自动更新,这样索引文件就能保持与数据表一致的状态。
结构复合索引总是依附于数据表,不能独立使用和操作。
3、当我们打开数据表时,系统如果找不到相应的结构复合索引文件,便会谈出找不到CDX文件的对话框。
在弹出的对话框中单击“忽略”按钮,VFP将会先删除原来创建的结构复合索引文件标识,再打开此表。
也就是此表以后将不具有结构复合索引文件。
4、只有在结构复合索引文件中,才能够创建主索引。
5、结构复合索引文件打开时,其中的所有索引项同时被打开。
但是除非指定了某个索引标识,数据表记录仍然按自然顺序排列。
⏹独立复合索引文件
1、一个数据表可以创建多个相关的独立复合索引文件。
每个文件都是用INDEX命令独立创建的。
2、独立符合索引文件名与其数据表文件名经常是不一样的,是由用户在创建索引文件时指定的,但是文件扩展名仍为CDX。
3、独立复合索引文件是独立于数据表文件的,虽然也不能单独使用和操作,但是必须专门打开,而且允许独立关闭。
4、在某些情况下,使用独立复合索引文件比使用结构复合索引文件的执行效率会高一些。
四、使用INDEX命令
在VisualFoxPro中,一般情况下都可以在表设计器中交互建立索引,特别是主索引和候选索引是在设计数据库时确定好的。
但有时需要在程序中临时建立一些普通索引或唯一索引,所以仍然需要了解一下索引命令,并且通过索引命令还可以进一步帮助读者理解VisualFoxPro的索引和索引文件。
建立索引的命令是INDEX,具体格式如下:
INDEXONeXpressionTOIDXFileName|TAGTAGName[OFCDXFileName]
[FORIEXpression][COMPACT]
[ASCENDING|DESCENDING]
[UNIQUE|CANDIDATE]
[ADDITIVE]
其中参数或选项的含义如下:
eExPression是索引表达式,它可以是字段名,或包含字段名的表达式。
TOIDXFileName建立一个单独的索引文件,IDNFileName是扩展名为.idx的文件,该项是为了与以前版本兼容,现在一般只是在建立一些临时索引时才使用。
TAGTagname中的Tagname给出索引名。
多个索引可以创建在一个索引文件中,这种索引称做结构复合索引,其文件名与相关的表同名,并具有.CdX扩展名。
如果选用OF短语,则可以用CDXFileName指定包含多个索引的复合索引文件名,扩展名也是.CdX。
FORIExPression给出索引过滤条件,只索引满足条件的记录,该选项一般不使用。
COMPACT当使用TOIDXFileName时说明建立一个压缩的.idx文件,复合索引总是压缩的。
ASCENDWG或DESCENDING说明建立升序或降序索引,默认开序。
说明现在建立索引时是否关闭以前的索引,默认是关闭已经使用的索引,使新建立的索引成为当前索引。
从以上命令格式可以看出,使用命令可以建立普通索引、唯一索引(UNIQUE)或候选索引(CANDIDATE),但没有主索引,前面提到主索引和候选索引具有相同的功能,在表设计器中指定一个主索引实际就是指定了一个主关键字。
因此,一般只使用结构复合压缩索引,而非结构索引多半是为了与以前版本兼容,建议在新的应用中不再使用。
如果是临时用途,不希望以后系统自动维护索引,或者使用完后就删除索引文件,则可以使用那两种非结构索引。
例如,
使用INDEX命令为数据库学生管理中的表学生创建以学号字段为索引项,升序排序,索引类型为普通索引的单独索引文件XHSY。
OPENDATABASE学生管理
USE学生
INDEXON学号TOXHSY
BROWSE
例如,
使用INDEX命令为数据库学生管理中的表学生创建以年龄为索引项,升序排序,索引类型为普通索引的单独索引文件NLSY。
OPENDATABASE学生管理
USE学生
INDEXON2006-YEAR(出生日期)TONLSY
BROWSE
例如,
使用INDEX命令为数据库学生管理中的表学生创建以性别升序排序,如果性别相同在按学号升序排序的索引项,索引类型为普通索引的单独索引文件NLSY。
OPENDATABASE学生管理
USE学生
INDEXON性别+学号TOXBXHSY
BROWSE
例如,
使用INDEX命令为数据库学生管理中的学生表创建以姓名字段为索引项,升序排列的结构符合索引文件,索引类型为候选索引。
OPENDATABASE学生管理
USE学生
INDEXON姓名TAGSY1CANDIDATE
BROWSE
例如,
使用INDEX命令为数据库学生管理中的学生表创建以性别字段升序排列,性别相同再按照出生日期字段升序排列为索引项的结构符合索引文件,索引类型为惟一索引。
OPENDATABASE学生管理
USE学生
INDEXON性别+DTOC(出生日期)TAGSY2UNIQUE
BROWSE
例如,
使用INDEX命令为数据库学生管理中的学生表创建以出生日期字段为索引项,升序排列的独立复合索引文件,索引类型为普通索引。
OPENDATABASE学生管理
USE学生
INDEXON出生日期TAGSY11OFSYWJ
BROWSE
例如,
使用INDEX命令为数据库学生管理中的学生表创建以院系字段为索引项,升序排列的独立复合索引文件,索引类型为普通索引。
OPENDATABASE学生管理
USE学生
INDEXON院系TAGSY22OFSYWJ
BROWSE
五、索引的操作
⏹打开索引文件
与表名相同的结构索引在打开表时都能够自动打开,并随着数据表文件的关闭而关闭,但是对于单独索引和独立复合索引文件,则必须采用专门的命令打开。
打开索引文件的命令格式为:
SETINDEXTOIndexFileList
其中IndexFileList是用逗号分开的索引文件列表,可以包含.idx索引和.cdX索引。
执行该命令后,索引文件列表中的第一个索引文件成为主控索引文件。
如果主控索引文件是.idx文件,因为它是单索引文件,表处理的记录次序将按其索引顺序进行。
如果主控索引是.cdx文件,因为它是复合索引文件,则默认索引项是它在创建时的第一个索引项。
如果要使用其他索引项还必须具体指定。
例如,
打开单独索引文件XHSY。
OPENDATABASE学生管理
USE学生
SETINDEXTOXHSY
BROW
例如,
打开独立复合索引文件SYWJ。
OPENDATABASE学生管理
USE学生
SETINDEXTOSYWJ
或者
USE学生INDEXSYWJ
⏹设置当前索引
尽管结构索引在打开表时都能够自动打开,或者打开了非结构复合索引文件作为主控索引文件在使用某个特定索引项进行查询或需要记录按某个特定索引项的顺序显示时,则必须用SETORDER命令指定当前索引项,SETORDER命令的常用格式是!
SETORDERTO[nIndexNumber|[TAG]TAGName
[ASCENDING|DESCENDING]
其中可以按索引序号(nIndexNumber)或索引名(TAGName)指定索引项。
索引序号是指建立索引的先后顺序号,并且按照在SETINDEXTOIndexFileList命令中的总序号排列,特别不容易记清,建议使用索引名。
不管索引是升序或是降序建立的,在使用时都可以用ASCENDING或DESCENDING重新指定升序或降序。
例如,
设置当前索引为结构复合索引文件中索引标识为SY1的索引项。
OPENDATABASE学生管理
USE学生
SETORDERTOTAGSY1
或者:
USE学生ORDERTAGSY1
BROWSE
例如。
设置当前索引为独立复合索引文件中索引标识为SY11的索引项。
OPENDATABASE学生管理
USE学生
SETINDEXTOSYWJ
SETORDERTOSY11
或者:
USE学生INDEXSYWJ
SETORDERTOSY11
BROWSE
⏹索引项的删除
1、消当前索引设置
要取消当前索引设置,而使记录按照自然顺序在数据表中显示,需执行如下所示的命令:
命令语法:
SETORDERTO0或SETORDERTO
例如,
当前索引SY11的设置。
SETORDERTO0
BROWSE
2、删除索引标识
要删除结构复合文件中的索引标识,应当打开数据表文件,并打开其表设计器对话框,在“索引”页面中选定要删除的索引标识后,单击“删除”按钮删除。
在打开数据表文件后,对于结构复合索引或独立复合索引文件,都可以使用删除命令来删除索引项,其格式如下:
DELETETAGTAGName1
其中TAGName1指出了要删除的索引名。
如果要删除全部索引可以使用命令:
DELETETAGALL
例如,
删除结构复合索引文件中SY1索引标识。
DELETETAGSY11
⏹重建索引标识
对于独立复合索引文件,如果在打开数据库表时没有将它们打开,那么对数据表进行增加、修改与删除操作时,索引文件就不会自动进行相应的操作。
为了使得索引文件能够与表文件相互对应、数据一致,用户必须进行索引文件的重建操作。
索引文件的重建操作并不是去新建索引文件中的每一个索引,它只是将“已有的”索引项按数据表的当前情况更新。
要更新已有的索引,在打开表与索引文件后,执行REINDEX命令。
例如,
OPENDATABASE学生管理
USE学生
REINDE
此时仅有结构复合索引文件被打开,所以会更新学生.CDX中所有的索引。
例如,
OPENDATABASE学生管理
USE学生INDEXSYWJ
REINDE
此时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 索引 查询