重要资料VFP表操作索引统计关联连接等讲解.docx
- 文档编号:25411757
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:38
- 大小:534.48KB
重要资料VFP表操作索引统计关联连接等讲解.docx
《重要资料VFP表操作索引统计关联连接等讲解.docx》由会员分享,可在线阅读,更多相关《重要资料VFP表操作索引统计关联连接等讲解.docx(38页珍藏版)》请在冰豆网上搜索。
重要资料VFP表操作索引统计关联连接等讲解
查询、统计和多表操作
表文件中记录的顺序通常是人们在输入数据时按输入的先后次序存储的,并以记录号表示,这个顺序只反映了存放数据的先后顺序。
但在数据处理实际应用中,由于数据库十分庞大,为了高效方便地处理数据,常常需要对记录位置进行重新整理,并按某种指定的顺序对表记录进行处理。
例如,对学生成绩表按学号为序显示输出记录,以便查找;或按总分高低为序输出记录,以便进行比较等等。
对记录位置进行重新整理通常有排序和索引两种方法。
排序是对表文件进行物理位置的整理;索引是对表文件进行逻辑位置的整理。
一、排序
表文件的排序操作就是根据表的某个关键字或关键字表达式重新排列表记录的位置。
执行排序操作后将生成一个新的表文件(称为:
排序文件)。
新文件的结构和数据可以与源文件完全相同,也可以只取源文件的部分字段。
新文件不改变源文件内容和记录顺序。
【命令】SORT TO<新文件名>ON <字段名1>[/A][/D][/C][,<字段名2>[/A][/D][/C]…][ASCENDING|DESCENDING][<范围>][FOR<条件>|WHILE<条件>][FIELDS<字段名表>|FIELDSLIKE<通配符>|FIELDSEXCEPT<通配符>]
【功能】对当前表中指定范围内、满足条件的记录按指定字段升序或降序重新排序,并将排序结果存入新文件名中。
【说明】
①排序结果存入由TO<新文件名>指定的表文件中,系统默认文件扩展名为.DBF。
②在ON子句中的字段名表示排序的关键字段。
当使用一个关键字时,叫“单重排序”;使用多个关键字时,叫“多重排序”。
在多重排序中,关键字有主次之分。
主关键字是指能够唯一标识某个记录的关键字;次关键字是指标识具有某种相同属性的某些记录的关键字。
在关键字表达式中,主关键字排在前面,次关键字排在后面。
执行排序操作时,先按主关键字排列,当在主关键字出现相同字段值时,再按次关键字排序。
③关键字段可以是N型、C型或D型,但不能是L型、M型和G型数据。
即不可选用备注型或通用型字段来排序。
其中:
N型以数值大者为大;C型以拼音顺序A~Z;D型以后面的日期为大。
④参数/A或ASCENDING表示升序排序;/D或DESCENDING表示降序排序。
省略时,表示升序;/C只适用于C型数据,选择/C时,不区分大小写字母,省略/C时,小写字母大于大写字母。
⑤省略<范围>、FOR<条件>/WHILE<条件>等子句,则对所有记录排序。
⑥FIELDS子句指新表中包含的字段,省略时,默认新表包含源表中所有字段。
<字段名表>可以包含其他工作区中的表文件字段,但必须使用别名调用格式:
工作区号->字段名;或:
别名->字段名;或:
别名.字段名。
【例5-1】对表文件“学生.DBF”中的男生按入校总分降序排序,生成新文件“入校总分.DBF”,且新表中只包含学号、姓名、入校总分3个字段。
USE学生
BROWSE&&显示结果如图5-1所示。
图5-1学生.DBF显示结果
SORTTO入校总分ON入校总分/DFIELDS学号,姓名,入校总分
USE入校总分
BROWSE&&显示结果如图5-2所示。
图5-2入校总分.DBF显示结果
【例5-2】对“教师.DBF”记录中享受政府津贴的教师按姓名升序排序,生成新文件“政府津贴.DBF”。
USE教师
BROWSE&&显示结果如图5-3所示。
图5-3教师.DBF显示结果
SORTTO政府津贴ON姓名FOR政府津贴
USE政府津贴
BROWSE&&显示结果如图5-4所示。
图5-4政府津贴.DBF显示结果
二、索引
5.2.1索引的概念
VisualFoxPro的索引文件由指向.DBF文件记录的指针构成,这些指针指向表文件中的记录,在逻辑上按照指定索引关键字排序,索引并不改变表记录的物理顺序,只是与表记录建立一种逻辑关系。
索引和表(.DBF)分别存储在两个文件中。
在索引文件中,只包含索引关键字和记录号两个字段,每个关键字值对应表文件中的一个记录号,利用记录指针的移动确定记录的逻辑顺序。
索引是一种不可显示文件。
如果用户希望按照某种特定顺序查看和访问表记录,例如按总分从高到低的顺序查看学生表中的记录,可以按总分索引,然后根据这个索引关键字设置表中记录的顺序,并且按新的顺序访问表记录。
使用索引可以加速对表的查看和访问操作,这类似于一本书按目录快速查找内容。
1.物理顺序、逻辑顺序与使用顺序
记录储存在表文件中的实际排列顺序,称为物理顺序。
执行排序操作后,记录在排序文件中形成的顺序就是一种物理顺序。
按照某个关键字或关键字表达式在关键字与记录号之间建立的一种逻辑上的顺序,称为逻辑顺序。
执行索引操作后,索引关键字与记录号建立的顺序就是一种逻辑顺序。
实际操作的记录顺序,称为使用顺序。
使用顺序可以是物理顺序,也可以是逻辑顺序。
记录指针在表记录中的移动是按使用顺序进行的。
2.索引的分类
VisualFoxPro的索引分为单索引和复合索引。
只包含一个索引项的索引文件,称为单索引文件(又叫独立索引文件)。
单索引文件扩展名为.IDX。
包含有多个索引项的索引文件,称为复合索引文件。
在复合索引文件中每个索引项都有一个索引标识(IndexTag),代表索引的名称。
复合索引文件自动被压缩,以压缩方式储存,占有较小空间。
复合索引文件在使用时必须打开,而且在更新表文件数据时,必须使其处于活动状态。
复合索引文件扩展名为.CDX。
根据功能不同,复合索引可以分为主索引、候选索引、普通索引和唯一索引4种类型。
(1)主索引
主索引是设定有主关键字的索引,主关键字能唯一确定记录的顺序,它不允许在指定字段中出现重复值。
如果在任何已经包含了重复数据的字段中指定主索引,VisualFoxPro将返回一个错误信息。
例如,将姓名字段作为主索引关键字,若出现同名同姓人员,也即出现了关键字重复值,这样的关键字就不是主关键字。
主索引仅适用于表表,一个数据表只能创建一个主索引,自由表不能创建主索引。
(2)候选索引
像主索引一样候选索引要求字段值的唯一性,它不包含NULL值或重复值。
如果在任何包括重复数据的字段中指定候选索引,VisualFoxPro将返回一个错误信息。
一个数据表或自由表中都可以建立多个候选索引。
(3)普通索引
普通索引不要求字段值具有唯一性,可以决定记录的处理顺序,且允许字段中出现重复值。
一个数据表或自由表中可以有多个普通索引。
(4)唯一索引
不允许两个记录具有相同的字段值,对于关键字值相同的记录,索引中只列入其中的第一个记录。
一个数据表或自由表中可以有多个普通索引。
复合索引文件分为有结构的结构复合索引文件和无非结构的独立复合索引文件。
结构复合索引文件的由VisualFoxPro自动命名,与表文件同名,它随表文件的打开而打开,在对表增加或删除记录时系统会自动维护。
独立复合索引文件与表文件不同名,且不随表文件的打开而打开。
打开独立复合索引文件要使用SETINDEX命令。
3.永久关系与参照完整性
主索引用于表表中主表或“被引用”表,在一个永久关系中建立参照完整性。
(1)永久关系
指表中表之间的一种保存在数据表文件中的关系。
在表设计器中可以看到连接两个表索引之间的关系线。
(2)参照完整性
在永久关系的相关表中,如果只对其中的一个表进行插入、更新或删除操作,就会影响到数据的完整性。
因此,参照完整性属于表表间规则,用于控制数据的一致性。
为了保持参照完整性,可以利用“参照完整性生成器”建立规则,控制记录在相关表中的插入、更新或删除。
5.2.2索引的建立
1.命令方式
【命令】INDEX ON<索引关键字|索引关键字表达式> TO <单索引文件名> |TAG<索引标识名> [OF <复合索引文件名> ][FOR<条件>][COMPACT][ASCENDING|DESCENDING][UNIQUE|CANDIDATE][ADDITIVE]
【功能】对当前表文件按指定关键字建立索引或增加索引标识。
【说明】
①<索引关键字|索引关键字表达式> :
指定建立索引文件的关键字。
可以是一个字段,也可以是多个字段组成的关键字表达式,多个字段之间用“十”或“一”连接,主关键字在最前面,且数据类型要相同。
<索引关键字>可以是N型、C型、D型。
②TO子句建立单索引(.IDX)。
TAG子句建立复合索引(.CDX)及索引标识。
选项COMPACT指定单索引为压缩文件。
③OF子句指定独立复合索引文件名。
缺省该子句表示建立结构复合索引文件。
④FOR<条件>对符合条件的记录建立索引,缺省该条件则对所有记录建立索引。
⑤ASCENDING表示升序索引;DESCENDING表示降序索引;UNIQUE表示建立唯一索引;TAGCANDIDATE表示候选索引。
⑥ADDITIVE表示建立索引文件时,并不关闭先前的索引。
⑦索引文件不能单独使用,必须同表文件一起使用。
⑧该命令默认建立普通索引型索引文件。
【例5-3】对学生.DBF按入校总分建立单索引文件。
USE学生
INDEXON入校总分TOZF
LIST
【例5-4】学生.DBF建立复合索引,其中包含3个索引:
(1)以姓名降序排列,索引标识为普通索引。
USE学生
INDEX ON 姓名 TAG xm DESCENDING
**建立复合索引文件学生.CDX,xm为普通索引标识
LIST
(2)以性别升序排列,性别相同时以入校总分升序排列,索引标识为普通索引。
INDEXON性别+STR(入校总分,3TAGxbzfa
**关键字为性别+STR(入校总分,3,普通索引标识xbzfa加入学生.CDX中
LIST
(3)以性别升序排列,性别相同时以出生年月降序排列,索引标识为候选索引。
INDEXON性别-DTOC(出生年月TAGxbcsdCANDIDATE
**xbcsd为候选索引型索引标识,索引标识xbcsd加入学生.CDX
LIST
2.菜单方式建立索引
【菜单】单击“文件”菜单→单击“打开”命令→选中“表”选项→“显示”菜单→表设计器→“索引”选项卡→“索引名”→“排序”→“类型”→“表达式”→单击“确定”按钮。
如图5-5所示。
图5-5表设计器中”索引”选项卡
【例5-5】利用表设计器建立或修改索引。
(1)选择“文件”菜单中的“打开”命令,选择表文件“学生.DBF”。
(2)选择“显示”菜单中的表设计器,单击“索引”选项卡,将“索引名”设为XBXHAD,单击该表达式右侧的按钮,弹出“表达式生成器”对话框,如图5-6所示。
在“字段”列表框中双击“性别”,在“数学”组合框中选定“+”号,在“字段”列表框中双击“学号”,这时,“表达式”列表框中显示“性别+学号”。
也可以在“表达式”列表框中直接输入表达式“性别+学号”。
图5-6表达式生成器
(3)单击“确定”按钮,便完成建立工作。
(4)利用“表设计器”对话框中的“插入”按钮在当前行前插入一个空行,可以建立新索引。
利用“删除”按钮可以删除选定的索引。
5.2.3索引的使用和删除
使用索引查询必须满足以下条件:
(1)打开表。
(2)打开索引文件。
(3)确定主控索引文件。
(4)对于复合索引文件还需确定主控索引。
1.打开索引文件
使用索引,必须同时打开表文件和索引文件。
打开索引文件就是把索引文件调入内存,并对当前相关表进行排序。
打开一个表文件时,结构化复合索引文件将随着表文件的打开而打开,如果要使用其他索引文件,则要使用命令来打开索引文件。
一个表文件可以打开多个索引文件,但任何时刻只有一个索引文件起作用,当前起作用的索引文件称为主控索引文件。
只有主索引文件对表文件才有控制作用,记录指针总是指向主索引文件关键字值的第一个记录上。
同一个复合索引文件可能包含多个索引标识,但任何时刻只有一个索引标识起作用,当前起作用的索引标识称为主控索引。
打开索引文件有3种方法:
(1)在建立索引文件的同时,就打开了索引文件。
(2)打开表文件的同时打开索引文件
【命令】USE<表文件名>|?
[INDEX<索引文件名表>|?
][ORDER[<数值表达式>]|<单索引文件名>|[TAG]<标识名>[OF <复合索引文件名>][ASCENDING|DESCENDING]]]
【功能】打开表文件的同时打开一个或多个索引文件。
【说明】
①INDEX<索引文件表>包括单索引或复合索引文件,其中第一个索引文件是主索引。
②选择“?
”将弹出多个表文件或索引文件,供选择。
③ORDER[<数值表达式>]是将<索引文件名表>中的第几个设置为主控索引。
④ORDER[<单索引文件名>]指定<单索引文件名>为主控索引文件。
⑤ORDER[TAG]<标识名>[OF <复合索引文件名> ]指定复合索引的<标识名>为主控索引;不选择[OF <复合索引文件名> ],则打开结构复合索引文件。
【例5-6】应用举例。
USE学生INDEX学生ORDERTAGxbxha
USE学生INDEX学生ORDERTAGxm
(3)打开表文件后再打开索引文件
【命令】SET INDEX TO<索引文件名表>[ADDITIVE]
例如:
USE学生
SET INDEX TO zf
2.设置主控索引
如果只打开一个索引文件,它自然就是主控索引文件;如果打开了多个索引文件,可以利用设置主索引文件命令来改变主索引文件。
【命令】SET ORDER TO[<数值表达式>|<单索引文件名>|[TAG]<索引标识名>[OF <复合索引文件名> ][ASCENDING|DESCENDING]]
【功能】对打开的索引文件中指定主控索引文件,或在打开的复合索引文件中设置主控索引。
【说明】SET ORDER TO0或SET ORDER TO都是取消主控索引文件或主控索引。
【例5-7】为如图5-7所示的复合索引文件学生.CDX设置主索引。
图5-7复合索引文件学生.CDX
USE学生
SETORDERTO2&&指定学生.CDX中的索引序号2(即xm)为主控索引。
SETORDERTOxbxha&&指定学生.CDX中的索引标识xbxha为主控索引。
SETORDERTOzf&&指定单索引文件zf.IND为主控索引文件。
3.更新索引
当对表文件进行追加、修改等操作后,对于打开的索引文件或随着表文件打开而打开的复合索引文件,系统自动将其更新,而对于那些没有打开的索引文件则变得无意义了。
为了使这些索引文件仍然有效,可以利用重新索引命令,使其与修改后表文件保持一致。
【命令】REINDEX[COMPACT]
【功能】重新建立打开的索引文件。
【说明】
(1)在更新索引之前,应打开表文件和相应的索引文件。
(2)选择COMPACT,将非压缩单索引文件转换为压缩单索引文件。
【例5-8】更新索引举例。
USE学生
LIST&&显示有10条记录
APPEND&&追加一条记录
USE
USE学生INDEX学生ORDERTAGxm&&打开主关键字为姓名的复合索引文件
LIST&&显示有11条记录被索引
USE学生
SETINDEXTOZF&&打开主关键字为入学总分的单索引文件
LIST&&显示只有10条记录被索引
REINDEX
LIST&&显示有11条记录被索引
4.关闭索引文件
关闭索引文件,就是取消索引文件对表文件的控制作用。
关闭索引文件有三种方法:
(1)关闭当前索引文件:
SETINDEXTO
(2)关闭所有索引文件:
CLOSEINDEX
(3)关闭表文件的同时,关闭索引文件:
USE
5.删除索引
可以通过删除复合索引文件中的索引标识来删除不再使用的索引,或者通过删除单索引文件本身来删除独立索引。
删除无用的索引标识可以提高数据处理性能,因为VisualFoxPro不必再去更新无用标识来反映表中数据的变化。
由于复合索引中包含由多个索引标识,所以应采用删除索引标识的方法。
【命令】DELETETAGALL|<索引标识1>[,<索引标识2>]……
【菜单】“文件”菜单→“打开”命令→“表”选项→“显示”菜单→表设计器→“索引”选项卡→“索引名”→“删除”。
【功能】从指定复合索引文件中删除指定索引标识,或删除所有索引标识。
【说明】当删除指定复合索引文件中的全部标识后,该复合索引文件将自动被删除。
三、查询
查询就是按指定的查询条件查找符合条件的记录。
排序和索引的主要目的也是为了对表文件快速查询。
VisualFoxPro提供了几个与索引相关的函数FOUND()、RECNO()和三个检索命令LOCATE与CONTINUE、SEEK|FIND、SQL语言的查询命令:
SELECT-SQL。
5.3.1函数FOUND()和RECNO()的使用
1.记录找到否测试函数
【命令】FOUND([<工作区号>]
【功能】判断记录是否找到。
【说明】如果记录找到,则函数返回值为.T.;否则函数返回值为.F.。
如果指定工作区中的表文件没有打开,则函数返回值为假。
2.求得记录号函数
【命令】RECNO(0
【功能】给出当前正在使用的表文件的当前记录号。
【说明】若指定工作区中的表文件没有打开,则函数返回值为0。
5.3.2顺序查询
顺序查询又叫直接查询,是按照表记录的物理位置依次逐个查询。
1.顺序查询命令
(1)LOCATE命令
【命令】LOCATE[范围][FOR<条件>]|[WHILE<条件>]
【功能】从指定范围内查找满足条件的第一个记录,并将记录指针定位在此。
【说明】省略[范围]和[FOR<条件>]|[WHILE<条件>],系统默认为ALL。
该命令一旦找到符合条件的第一个记录,记录指针立即指向该记录,并且停止继续查找,显示其记录号,但不显示记录内容;如果没有找到,记录指针则定位在范围末尾,屏幕显示“已到定位在范围末尾”。
2.CONTINUE命令
【命令】CONTINUE
【功能】与LOCATE命令连用,继续查找LOCATE命令指定条件的记录。
【说明】CONTINUE命令必须用在LOCATE命令之后。
每执行一次CONTINUE命令,将继续查找下一个符合条件的记录。
【例5-9】在“学生.DBF”中查找姓名为王小平的记录。
USE学生
LOCATEALLFOR姓名=“王小平”
DISP
CONTINUE&&屏幕显示:
已到定位在范围末尾。
【例5-10】在“教师.DBF”中查找职称是教授的记录。
USE教师
LOCATE ALLFOR职称=“教授”
DISP
CONTINUE
DISP
CONTINUE&&屏幕显示:
已到定位在范围末尾。
5.3.3索引查询
索引查询又叫快速查询,是按照表记录的逻辑位置查询。
因此,索引查询要求被查询表文件建立并打开索引。
1.FIND命令
【命令】FIND<字符型常量>|<数值型常量>
【功能】在打开的索引文件中查找索引关键字与<字符型常量>或<数值型常量>相匹配的第一个记录,并将记录指针定位在此。
【说明】
①FIND命令只能对已建立并打开的索引文件进行查询。
如果查找成功,记录指针定位在符合条件的第一个记录上,并停止继续查找,FOUND(函数值为.T.;否则,屏幕显示:
“没有找到。
”,FOUND(函数值为.F.,EOF(函数值为.T.。
②FIND命令可以使用内存变量,如果是C型内存变量,必须宏代换:
FIND&型内存变量>;如果是N型内存变量,则先用STR(函数将其转换为C型内存变量后,再用宏代换。
③FIND命令只查找符合条件的第一个记录,与SKIP命令配套使用可以实现继续查找。
④利用SETEXACTON命令可以实现对C型数据进行精确查找,即要求C型数据精确匹配;利用SETEXACTOFF命令可以可以实现对C型数据进行模糊查找,即不要求C型数据精确匹配。
【例5-11】在学生DBF中查找姓名为王小平的记录。
USE学生
INDEXON姓名TAGxm
FIND王小平
DISP
【例5-12】在学生DBF中查找男同学的记录。
USE学生
INDEXON性别TAGxb
FIND男
LISTFOR性别=“男”
【例5-13】使用内存变量示例。
tn=STR(595
INDEXON入校总分TAGrxzf
FIND&tn
DISPFIELDS姓名,入校总分
tm=“张强”
INDEXON姓名TAGxm
FIND&tm
DISPFIELDS姓名
2.SEEK命令
SEEK命令比FIND命令的功能更强。
它不仅能够查找C型和N型数据,还能够查找D型和L型数据。
【命令】SEEK<表达式>[ORDER<索引号>|<单索引文件名>]|[TAG]<索引标识>
【功能】在打开的索引文件中查找主索引关键字与<表达式>相匹配的第一个记录,并将记录指针定位在此。
【说明】
①SEEK命令只能对已建立并打开的索引文件的表文件进行检索。
如果查找成功,记录指针定位在符合条件的第一个记录上,并停止继续查找,FOUND(函数值为.T.;否则,屏幕显示:
“没有找到。
”,FOUND(函数值为.F.,EOF(函数值为.T.。
②SEEK命令可以查找C型、N型、D型、L型数据。
如果查找C型常量,必须用定界符将C型常量引起来。
③SEEK命令只查找符合条件的第一个记录,与SKIP命令配套使用可实现继续查找。
④利用SETEXACTON命令可以实现对C型数据进行精确查找,即要求C型数据精确匹配;利用SETEXACTOFF命令可以可以实现对C型数据进行模糊查找,即不要求C型数据精确匹配。
【例5-14】在“学生.DBF”中查找年龄为18岁的记录和出生年月为1984年7月24号的记录。
USE学生
INDEXONYEAR(DATE(-YEAR(出生年月TAGnj
SEEK18
DISPALLFORYEAR(DATE(-YEAR(出生年月=18
INDEXON出生年月TAGcs
SEEK{^1984/7/24}
DISP
【例5-15】在教师.DBF中查找享受政府津贴的教师。
USE教师
INDEXON政府津贴TAGzfjt
SEEK.T.
DISP
SKIP
DISP
SKIP&&屏幕显示:
已到文件尾。
【例5-16】精确查找和模糊查找举例。
USE授课
INDEXON课程号TAGkch
SEEK“C16”
?
FOUND(&&屏幕显示:
.T.
SETEXACTON&&设置精确配置
SEEK“C16”
?
FOUND(&&屏幕显示:
.F.
四、统计
对表文件进行统计计算,包括计数、求和、求平均值、计算和汇总。
5.4.1计数命令COUNT
【命令】COUNT[范围][FOR<条件>|WHIIE<条件>][TO<内存变量>]
【功能】统计当前表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 重要 资料 VFP 操作 索引 统计 关联 连接 讲解