文档库

最新最全的文档下载
当前位置:文档库 > 排序和索引

排序和索引

排序和索引

排序:(书87页)

基本格式: Sort on … To …

sort on <字段名>[/a][/d][/c],<字段名1>[/a][/d/][c],...[fields <字段名表>][范围][for/while 条件] to 新表文件名

具体说明:默认为/a 升序 . /d 降序/c排序时不区分大小写.

排序会产生一个已经排好序的新的DBF文件, 而以前的表没有改变.

注意比较: 中文>小写>大写>数字

其实: 某个大写字母>它和它对应的小写字母以前的字母

某个大写字母<它和它对应的小写字母及以后的字母

举例说明:

例如: 请对xsda中所有入学成绩在550分以上的男同学按照姓名进行排序

use xsda

sort on 姓名to xm for 性别='男' and 入学成绩>550

use xm

list

例如2: 请将女同学排在前面,男同学排在后面,男女同学再按照入学成绩由高到低排列排序后保存到文件xbcj.dbf中,并观查结果(多重排序)

use xsda

sort on 性别/d, 入学成绩/d to xbcj

use xbcj

list

索引(书89页): 掌握索引的分类、建立、打开、更新。

*** 理解索引的涵义***

索引的分类:

单索引文件(非压缩型和压缩型)、复合索引文件(结构复合索引和非结构复合索引)

复合索引文件还可以分为:主索引、唯一索引(Unique)、候选索引(Candidate)、普通索引主索引:只能在数据库中建,索引字段无重复,一张表只能建一个主索引

候选索引:必须是复合索引。索引字段无重复。

唯一索引:相同的字段值只取第一个。

索引在建立时就被打开并且生效。

排序和索引

说明:所谓单索引文件就是指索引文件只能建立一次

建立方法:

index on 索引表达式to 单索引文件名

区别:有无参数compact ,有就为压缩型的。

例1:

use 学生

index on 姓名to xm*** 建立非压缩型的单索引文件

说明: ··建立非压缩型的单索引文件xm.idx

··建立时xm.idx

排序和索引

··默认是按照升序进行的

只能用复合索引的方法了

index on –入校总分to rxzf

单索引不能使用ascending 和descending 参数

复合索引才能使用ascending 和descending 参数

例2:

use 学生

index on 姓名to xmp compact

说明:··建立压缩的单索引文件xmp.idx ,文件名自己任取,扩展名默认为IDX

排序和索引

建立方法:

结构复合索引:index on 索引表达式tag 索引标识名

索引文件名和表一样。扩展名默认为CDX

非结构复合索引:index on 索引表达式tag 索引标识名of 索引文件名

索引文件名为of指定的文件名。扩展名默认为CDX

我将索引标识符又称为子索引

区别:

··结构复合索引不需要自己取复合索引文件名,而后者必须取

··当打开一个表文件时,结构复合索引自动打开,而后者必须手工打开

另外,复合索引可以加ascending表示升序,descending表示降序

说明:所谓复合索引文件就是指索引文件能建立多次

例如:index on 学号to aa (产生aa.idx的单索引文件)

如果再来一句index on 姓名to aa(再次产生aa.idx的单索引文件)

刚才aa.idx已经存在,所以计算机就会问你是否覆盖原来的aa.idx,覆盖则第2句有效,否则第1句有效。既是说不能重复建立。

但是看看:index on 学号tag xh of stu1(产生stu1.cdx)

index on 入校成绩tag gk of stu1(又产生stu1.cdx)

但是stu1.cdx是复合文件,所以<1>和<2>它们就不矛盾,而且是都融合到了stu1.cdx中。也就是说:现在只有一个stu1.cdx文件,但是它有两个子索引,一个是xh子索引,一个是gk 子索引(是由tag 来确定的)。但是文件只有一个stu1.cdx

例:

use 学生

index on 姓名tag xixi descending&&产生文件学生.cdx (结构复合索引)

index on 入校总分tag hehe&&产生文件学生.cdx (结构复合索引) 到此为止学生.CDX中有两个子索引,一个是xixi 一个是hehe

但是xixi和hehe都不是单独的文件,它们只是学生.cdx的两个部分

index on 姓名tag xm of mf 产生文件mf.cdx (非结构复合索引)

index on 入校总分tag rxzf of mf产生文件mf.cdx (非结构复合索引)

到此为止mf.CDX中有两个子索引,一个是xm 一个是rxzf

但是xm和rxzf都不是单独的文件,它们只是mf.cdx的两个部分

close all

use 学生因为存在学生.cdx ,所以现在学生.cdx同时被打开

而其它索引文件都处于被关闭的状态

排序和索引

1、被关闭

2、被打开,但是没有生效(被打开的作用是为了更新的方便)

打开一个索引的同时会将其它已经打开的索引关闭

如果不想关闭以前打开的索引,那么就使用参数ADDITIVE

3、被打开,生效(一张表只能有一个索引或者子索引生效)

排序和索引

多重索引和单索引文件、复合索引文件都不是一回事。

多重的涵义和那个sort中的那个是差不多的。

例如:

index on 入校总分to xm ··单重索引,后面的都是多重索引

index on 姓名+str(入校总分,3) to xmzf

index on 姓名+性别+IIF(三好生,’是’,’否’) tag xs of xmsh

index on 姓名+性别+IIF(三好生,’是’,’否’) tag xs of xmsh descending

排序和索引

如果不是C型的必须转换后用+ 连接,或用- 连接(表示去空格)

index on 性别-dtoc(出生日期) tag xbcsd candidate

排序和索引

1、方法一:新建索引时就索引就自动打开并且生效(主控索引)

2、方法二:打开表的同时打开索引。

格式:use 表名index 索引文件重点掌握:单索引文件的打开。

3、方法三:先打开表,再打开索引。

格式:set index to 表名[Additive ]

使用additive使得在打开新的索引的时候不会关闭已经打开的索引

4、设置主控索引:set order to

set order to 0或者是set order to都是取消主控索引

现在我们来做做完整的实验

下面做一个就可以执行一个list看看结果显示如何

use 学生

现在我们分别建立不同类型的索引文件:

index on 性别+str(入校总分,3) to xbzf 单索引文件xbzf.idx

index on 学号to xh compact 压缩单索引文件xh.idx

index on 出生年月tag csrq of nostr

index on 姓名+学号tag xmxh of nostr

非结构复合索引文件 .cdx 包含两个子索引:xmxh和csrq

index on 姓名tag xm descending

index on IIF(三好生,’是’,’否’)+str(入校总分,3) tag shzf

结构复合索引文件学生.cdx 包含两个子索引:xm和shzf

close all

use 学生

set index to xbzf

list

close all

use 学生index xbzf,xh,nostr

主索引是xbzf,此处打开4个索引文件,学生.cdx是自动打开的。

use 学生index nostr,xh,xbzf

没有主索引,因为nostr是复合索引,它的哪个子索引是主索引不能确定,所以不知道。这时候VF会什么都不显示,也可能有出错提示信息错误: 索引与表不匹配

所以,需要指定哪个子索引为主控索引:ORDER

排序和索引

下面看看order的用法:

首先按照打开索引文件时单索引文件名称的排列顺序进行编号,

排序和索引

根据这个原则,我们来看下面的东东:

use 学生index xbzf,xh,nostr order 1 : 主索引是xbzf

order 2 : 主索引是xh

order 3 : 主索引是学生.cdx中的xm

order 4 :主索引是学生.cdx中的shzf

order 5 :主索引是nostr.cdx中的csrq

order 6 : 主索引是nostr.cdx中的xmxh

再看这个例子:

use 学生index xh order 1主索引是xingming

2主索引是学生.cdx中的xm

3主索引是学生.cdx中的shzf

因为这时候只打开了xh.idx和学生.cdx两索引文件。

所以按照上面的原则来看,order 1肯定是单索引文件了,order 2、3就是看建立学生.CDX 时的顺序了

use 学生index nostr,xh,xbzf order 1 of 学生

主索引是学生.cdx中的xm

use 学生index nostr,xh,xbzf order 1 of nostr

主索引是nostr.cdx中的csrq

use 学生index nostr,xh,xbzf order tag csrq of nostr

主索引是nostr.cdx中的csrq

***** 注意tag 前一定要加order *****

use 学生<打开学生.cdx>

set order to 1 => set order to xm 主索引是学生.cdx中的xm

set odder to 2 => set order to shzf 主索引是学生.cdx中的shzf

use 学生index nostr,xbzf,xh order xh主索引是xh

排序和索引

排序和索引

reindex 或者是reindex compact

作用:被打开的索引能得到自动更新。但是没有被打开的索引不能得到自动更新当表的数据发生变化时,索引和表的数据就不一致了。

所以:如果表中数据有变化,对于没有打开的索引,我们要先打开,然后再对它进行更新例如:use 学生

index on 姓名to xm

use

use 学生

append

set index to xm

list

reindex

排序和索引

关闭当前工作区索引: set index to

关闭所有索引: close index

关闭表的同时就关闭索引

排序和索引

delete tag all 索引标记1,索引标记2,索引标记3 ……

排序和索引

建立时,可以选候选索引、普通索引和唯一索引

排序和索引

如果是命令方式建立唯一索引的话要加参数Unique

如果是命令方式建立候选索引的话要加参数tag … candidate

自己实验:

use 学生

index on 性别to xb Unique

list

index on 学号tag xh cand

list

排序和索引

逻辑顺序:主控索引生效时的顺序(排列顺序)

物理顺序:表的实际顺序(以记录号为准)

注意:范围参数中,record n是物理顺序,rest和next n是逻辑顺序条件参数是逻辑顺序

go top 和go bottom:逻辑顺序

go 数字:物理顺序

skip 数字:逻辑顺序

例如:

use 学生

index on 姓名to xm

go 4

list rest

go 2

skip 2

disp

go top

disp