- 1、本文档共43页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 2 表的索引与查找
;4.3 表的索引与查找;一般情况下,表中的记录是按其输入的先后顺序存放的,并不是按某个关键字有序,因此,为了提高表的查找效率,必须在查找前让表有序。
怎样让表有序呢?
有两种方法让表有序:
排序:生成一个新的表,数据重复,效率低
索引:建立一种对应关系,数据不重复,效率高 ;排序是根据不同的字段对当前表的记录做出不同的排列,产生一个新的表。新表与旧表内容完全一样,只是它们的记录排列顺序不同而已。
SORT TO
Sort to xsSortByScore on 入学成绩
造成数据的重复,排序一次就生成一个新表。
不能及时更新,改动数据就要重新排序。;物理地址;4.3.1 索引;物理地址;索引的类型 ;命令格式:
单索引文件:
Index on 索引表达式 to 单索引文件名
[for 条件]
[unique]
复合索引文件:
Index on 索引表达式 tag 索引标志名 [of 复合索引文件名]
[for 条件]
[ascending|descending] [unique];例4.10 如下命令为学生表建立一个单索引文件,按年龄升序排列
use 学生表
index on -year(出生日期) to sy
list;例4.10 执行结果 ;例1:请为学生表建立一个单索引文件sy.idx,按入学成绩降序排列,并列出入学成绩前5名的学生的学号,姓名,入学成绩。;???请为学生表建立一个单索引文件sy.idx,按年龄从大到小排列,列出年龄最大的5个学生。
index on 出生日期 to sy
List next 5;方法2:在表设计器中建立索引;索引文件的打开 – 命令窗口 ;索引文件的打开 – 菜单 ;索引文件的使用 ;;例4.11 为学生表分别建立按学号、性别、出生日期的索引,然后依次改变主控索引来浏览数据。;打开表和索引后,选择主菜单的“窗口-数据工作期”菜单选项。然后选择数据表,单击“属性”按钮,在打开的工作区属性对话框中选择所需的索引名即可。;练习1:
请对学生表建立3个索引,“按年龄升序”,“按学号升序”和“按姓名升序”。
其中“按年龄升序”的索引是一个单文件索引,名称是sy.idx。
然后分别显示年龄最小的5个学生,学号排在前面的5个学生,以及姓名排在前面的5个学生。
注意:单文件索引的建立只能用命令完成。;练习1:
请对学生表建立3个索引,“按年龄升序”,“按学号升序”和“按姓名升序”。
其中“按年龄升序”的索引是一个单文件索引,名称是sy.idx。
然后分别显示年龄最小的5个学生,学号排在前面的5个学生,以及姓名排在前面的5个学生。
Index on 出生日期 to sy descending
Index on 学号 tag xh
Index on 姓名 tg xm
Set order to sy
List next 5
Set order to xh
List next 5
Set order to xm
List next 5;索引文件的使用;4.3.2 查找;;;例4.13 在学生表中查找男生。;例4.14 编写程序统计学生表中少数名族女生人数。;练习2:
查找显示姓名为“许书亮”的学生信息。如果没有该学生,提示“该学生不存在!”
建立一个小程序,统计汉族的学生人数。;clear
close all
use 学生表
set exact on
locate for 姓名 = 许书亮
if found()
display
else
?该学生不存在!
endif
use;索引查找
利用主控索引建立的排序结果,按照索引表达式的值找到对应的记录。
速度非常快。
两个命令
SEEK 表达式
FIND 字符常量|数值常量;索引查找
SEEK 表达式
该命令查找当前表中主控索引关键字的值与表达式的值相匹配的第一条记录,找到后将记录指针定位于该记录。
表达式可以是数值型、字符型、日期型或逻辑型??达式
若找到了,则FOUND()值为.T.,否则FOUND()值为.F.且EOF()为.T.
使用skip命令使指针指向下一条符合条件的记录。;例4.15 采用索引查找的方法编写程序统计团员的人数。;索引查找
FIND
FIND 字符常量 | 数值常量
查找的值只能是字符常量或数值常量,不能是表达式
在例4.15的基础上,下述三个命令结果是一样的
SEEK 团员
FIND 团员
FIND 团员;练习3:
利用索引查找的方法(seek,find)查找湖南籍的学生,统计湖南籍的学生的人数。;clear
use 学生表
index on 籍贯 tag jg
list
n = 0
set exact off
seek 湖南
do while left(alltrim(籍贯),4) = 湖南
n = n + 1
文档评论(0)