740 likes | 844 Views
第六章数据库的排序、索引与统计. 第 6 章数据表的排序、索引与统计. 6.1 数据表的排序 6.2 数据表的索引 6.3 索引文件的使用 6.4 数据表文件数据的统计 6.5 分类汇总. 对已建好的表,表中的记录通常是按输入的先后顺序排列的,因此,表中记录的排列顺序是无规则的。这种数据记录的无规则排列,使得数据查询和数据处理的速度较慢。为了提高数据查询和数据处理的速度,就需要表中记录顺序按一定规则排列,这就需要引入排序或索引技术,也就是对数据表文件建立排序或索引文件。. 6.1 数据表的排序. 6.1.1 排序的概念
E N D
第6章数据表的排序、索引与统计 • 6.1数据表的排序 • 6.2数据表的索引 • 6.3索引文件的使用 • 6.4数据表文件数据的统计 • 6.5分类汇总
对已建好的表,表中的记录通常是按输入的先后顺序排列的,因此,表中记录的排列顺序是无规则的。这种数据记录的无规则排列,使得数据查询和数据处理的速度较慢。为了提高数据查询和数据处理的速度,就需要表中记录顺序按一定规则排列,这就需要引入排序或索引技术,也就是对数据表文件建立排序或索引文件。对已建好的表,表中的记录通常是按输入的先后顺序排列的,因此,表中记录的排列顺序是无规则的。这种数据记录的无规则排列,使得数据查询和数据处理的速度较慢。为了提高数据查询和数据处理的速度,就需要表中记录顺序按一定规则排列,这就需要引入排序或索引技术,也就是对数据表文件建立排序或索引文件。
6.1 数据表的排序 • 6.1.1 排序的概念 • 所谓排序,就是将表中的数据按一定的顺序(表的某个字段或某几个字段“值”的大小)重新排列(物理排序),并将重新排列后的结果保存成为一个新的有序表(新的独立存在的表文件)。决定排列顺序的字段被称为关键字段,也称为关键字。原数据表保持不变。 • 排序有二种方式:升序(Ascending,从小到大)和降序(Descending,从大到小)。
6.1.2 建立排序文件 • 格式:Sort To <排序文件名> On <关键字段1> [/A│/D] [/C][,<关键字段2>[/A│/D] [/C]…][<范围>] [For <条件1>] [Fields <字段名表> • 功能:根据当前表,建立一个经过排序的新表。
说明: • ⑴<排序文件名>:即保存重新排列后的新表名。 • ⑵On <关键字段>:表示排序字段,不能是备注型或通用型字段。/A表示按升序排列;/D表示按降序排序排列,默认为升序;/C表示排序时忽略大小写,否则不忽略。若选择多个字段,则表示多重排序:即先按主排序字段<字段名1>排序,若字段值相同,再按第二排序字段<字段名2>排序,依此类推。 • 特别注意:排序不允许使用任何类型的表达式作为关键字。
关键字值的大小是按下列原则来确定的:对于C型数据,若是字符按ASCII码值的大小进行比较,若是汉字则按汉字内码值大小进行比较。对于N型数据,以其数值的大小进行比较。对于D型数据以其年、月、日先后顺序比较(后为大)。对于L型数据,则“.F.”小于“.T.”。关键字值的大小是按下列原则来确定的:对于C型数据,若是字符按ASCII码值的大小进行比较,若是汉字则按汉字内码值大小进行比较。对于N型数据,以其数值的大小进行比较。对于D型数据以其年、月、日先后顺序比较(后为大)。对于L型数据,则“.F.”小于“.T.”。
【例6-1】在学生档案表.Dbf表文件中,对浙江籍的同学,按学号降序排序。并要求排序新文件(Xh.Dbf)只包含学号、班级、姓名、性别、入学年龄、籍贯等字段。排序后,浏览排序结果。【例6-1】在学生档案表.Dbf表文件中,对浙江籍的同学,按学号降序排序。并要求排序新文件(Xh.Dbf)只包含学号、班级、姓名、性别、入学年龄、籍贯等字段。排序后,浏览排序结果。 • Set Defa To F:/ • Use 学生档案表 • Sort On 学号/D To Xh For 籍贯= "浙江" Fields 学号,班级,姓名,性别,入学年龄,籍贯 • Use Xh • Browse • 思考:如果不打开Xh文件,显示结果有什么变化?
6.2 表的索引 • 排序是对数据表中记录进行物理排序,所形成的是一个新的数据表文件(*.DBF)。新数据表文件可以是原数据表文件的全部或部分内容,相对来说,该文件要占用大量的磁盘空间,这对于处理大型数据表来说是不合适的。在这种情况下,便需要使用索引技术。 • 索引技术是在不改变表记录排列的物理顺序的前提下,决定访问记录的次序、提高记录的检索速度,索引技术用于建立表间的关系。
6.2.1 索引的概念 • 所谓索引,就是按照一定的规则对表中的记录进行逻辑排序,并将排序结果形成索引文件。 • 索引文件只包含两项字段信息:一是每条记录索引关键字表达式的值,另一项是与其对应的记录号。既在索引文件中只保留索引关键字和记录号信息,并不存在记录的字段数据。在显示记录时,系统是依次按索引文件中的索引关键字值查到对应的记录号,根据记录号取出表文件中的记录,从而实现对数据表中的数据进行快速查询和访问的目的。
使用索引,不仅可以加速对数据的访问。而且,当进行记录添加、删除及修改时,系统还能自动更新打开的索引文件。使用索引,不仅可以加速对数据的访问。而且,当进行记录添加、删除及修改时,系统还能自动更新打开的索引文件。 • 注意:一个表创建索引后,并不改变表中记录的物理存储结构,同时索引文件要比排序文件小得多。另外,索引不能脱离表文件而单独使用,必须同时打开源数据表文件,索引文件才有效。索引的应用比排序广泛得多。
6.2.2 索引文件类型及索引的种类 • 1.索引文件类型 • 索引文件依其所含有的索引标识的多少可分为两类:单索引文件和复合索引文件。索引标识符是对索引的唯一标识。单索引文件只包含一个索引标识,其扩展名为“IDX”;复合索引文件可以含多个索引标识,其扩展名为“CDX”。
单索引文件的文件名需要由用户指定,它不能随数据表的打开而自动打开。单索引文件的文件名需要由用户指定,它不能随数据表的打开而自动打开。 • 复合索引文件又可分为结构复合索引文件及非结构复合索引文件两类。非结构复合索引文件的文件名与数据表名不同,需由用户指定,不能随数据表的打开而自动打开,必须使用单独的命令才能打开;结构复合索引文件的文件名与数据表同名,不需要用户指定,它能随数据表的打开自动打开,这是最重要也是使用最普遍的一种索引文件。
2.索引的种类 • 根据关键字可将索引分为四种类型:主索引、候选索引、惟一索引、普通索引。 • 主索引:是指在指定的字段或表达式中索引关键字段(主索引字段值)绝对不允许有相同值的索引。这种索引只能建立在数据库表中而不能建立在自由表中。一个数据表只能创建一个主索引。 • 候选索引:即索引关键字值是唯一的、有资格被选做主索引的索引。一个表可以有多个候选索引。数据库表和自由表都可以建立候选索引。
惟一索引:即允许索引关键字有相同的值的索引。当有相同值出现时,索引文件只记载相同值的第一条记录。数据库表和自由表都可建立惟一索引。这种索引是为和早期版本兼容而设计的,很少使用。惟一索引:即允许索引关键字有相同的值的索引。当有相同值出现时,索引文件只记载相同值的第一条记录。数据库表和自由表都可建立惟一索引。这种索引是为和早期版本兼容而设计的,很少使用。 • 普通索引:是除了上面几种索引之外的一种简单索引,它允许索引关键字有相同的值存在,并用独立的指针指向每条记录。数据库表和自由表都可以建立这种索引。
6.2.3建立索引文件 • 单索引文件的建立 • 一个表文件可以建立多个单索引文件,但一个单索引文件只能有一个索引关键字。 • 命令格式:Index On <索引关键字表达式> To <单索引文件名> [For<条件表达式>] [Unique] [Addtive] [Ascending] • 功能:建立一个单索引文件(.idx)
说明: • ⑴ON<索引关键字表达式>:索引关键字表达式可以是字段名或由字段名、函数、常量、运算符等组成的表达式,但不能使用字段名列表。表达式数据类型可以为数值型、字符型、日期型。对于表达式,要求整个表达式的各个部分数据类型必须一致。不一致时可使用转换函数来转换。
⑵ TO <单索引文件名>:定义单索引文件名。 • ⑶逻辑顺序默认为升序,也可用“Ascending”表示。特别注意:单索引文件不存在降序排列之概念。 • ⑸[Unique]:用来建立惟一索引。表示对于关键字值相同的多条记录,只有第一条记录出现在索引文件中。
⑹ [Addtive]:表示建立该索引文件时并不关闭原来打开的索引文件。 • 注意: • ①原先建立的单索引文件,应在打开数据表的基础上再打开索引文件才能使用。 • ②新建立的索引文件将自动打开并处于主控索引的位置。
【例6-3】将学生档案表.Dbf表中学号第3位为2的学生按学号建立单索引文件Xh.Idx。【例6-3】将学生档案表.Dbf表中学号第3位为2的学生按学号建立单索引文件Xh.Idx。 • Set Defa To F:\ • Use 学生档案表 • Index On 学号 To Xh For Subs(学号,3,1)=”2” • Browse &&观察执行结果 • Use
【例6-4】将学生高考成绩表,以数学和英语成绩为表达式建立单索引文件Sy.Idx。按数学成绩升序、英语成绩降序建立排序文件Sy.Dbf,观察二者的不同之处。【例6-4】将学生高考成绩表,以数学和英语成绩为表达式建立单索引文件Sy.Idx。按数学成绩升序、英语成绩降序建立排序文件Sy.Dbf,观察二者的不同之处。 • ◆建立单索引文件sy.Idx • Set Defa To F:\ • Use 学生高考成绩表 • Index On 数学+英语To Sy • Browse &&记录是按数学和语文总成绩的值来排列的 • Use
◆ 建立排序文件sy.Dbf • Use 学生高考成绩表 • Sort On 数学,英语/D To Sy • Use Sy &&打开排序文件 • Browse &&记录是先按数学,再按英语成绩的值来排列的 • Use
Use 学生档案表 Index on val(班级)+高考成绩 To bjcj List 当索引建立后,新建立的索引文件将自动打开且处于主索引的位置,记录随即按该班级和高考成绩的索引顺序排列。 注意:索引用“val(班级)+高考成绩”表达式作为索引关键字段,是先将字符型的班级字段值转换为数值型后按班级和高考成绩的总和来排列的。 也可改为Index on 班级+ str(高考成绩,5) To bjcj • 习题:将学生档案表按班级和高考成绩建立单索引文件bjcj.idx
2. 复合索引文件的建立 • 复合索引文件可使用表设计器和索引命令两种方式来建立。 • 方式一:命令方式创建索引 • 格式:Index On <索引关键字表达式> Tag <索引标识> [Of <非结构化复合索引文件名>][For<条件>] [Ascending│Descending][Unique│Candidate][Additive] • 功能:建立复合索引文件(.Cdx)。
说明: • ⑴<索引关键字表达式>:与单索引文件相同 • ⑵Tag<索引标识>子句:表示建立结构复合索引文件并取一个索引标识名。复合索引文件的每个索引都必须有一个索引标识,由TAG<索引标识>来命名。 • ⑶OF<复合索引文件名>为建立非结构复合索引文件的标志选项,<复合索引文件名>用于指定非结构复合索引文件的名字。
⑷ UNIQUE子句:建立惟一索引。对关键字值相同的记录,索引中只列入其中第一条记录。 • ⑸Ascending│Descending子句: Ascending(或Asce)表示升序, Descending (或Desc)表示降序。缺省,则默认为升序。 • 注:索引中不可以/A表示升序,/D表示降序。
注意: • ◆结构复合索引文件名无须用户定义,系统自动取与原数据表文件相同的名字,扩展名为.CDX。 • ◆非结构复合索引文件名应由OF<非结构化复合索引文件名>定义,扩展名为.CDX。 • ◆刚刚新建立的索引文件,其索引标识将自动打开并处于主控索引的位置。
【例6-5】将“学生档案表”文件中98级并且是分析系(学号第三个字符为3)或资环系(学号第三个字符为1)的学生以班级和年龄为索引表达式的升序排列,建立结构化复合索引文件,标识符为Bjnl。【例6-5】将“学生档案表”文件中98级并且是分析系(学号第三个字符为3)或资环系(学号第三个字符为1)的学生以班级和年龄为索引表达式的升序排列,建立结构化复合索引文件,标识符为Bjnl。 • Use F:\学生档案表 • Index On 班级+str(年龄) Tag Bjnl For Subs(学号,1,2)=”98” And (Subs(学号,3,1)=”3” Or Subs(学号,3,1)=”1”) • Browse • Use
【例6-6】将学生档案表.Dbf表文件以班级和出生日期为索引表达式的降序排列,建立非结构化复合索引文件(Xsbj.Cdx),索引标识为Bjcs。【例6-6】将学生档案表.Dbf表文件以班级和出生日期为索引表达式的降序排列,建立非结构化复合索引文件(Xsbj.Cdx),索引标识为Bjcs。 Set Defa To F:\ Use 学生档案表 Index On 班级+Dtoc (出生日期) Desc Tag Bjcs Of Xsbj Browse
习题: • 【例3】在学生档案表.DBF文件中按性别建立结构化复合索引文件,索引类型为唯一索引,索引标识为XB。
方式二:用表设计器方式建立索引 • 用表设计器方式建立索引文件是结构复合索引文件(.CDX)。 • ⑴建立索引文件: • 打开表设计器,选中“字段”选项卡,选中需要建立索引的字段,点击“索引”列表框,弹出一列表,内容为“无、升序、降序”,根据需要选中索引类型,即完成索引文件的创建。此时,系统默认对该字段建立的索引为普通索引,索引表达式为该字段名,且索引标识名与字段名相同。
⑵编辑索引: • 如果要编辑该索引,可选中“索引”选项卡,选中索引名,根据需要进行相关操作。 表设计器窗口中“索引”选项卡
⑶使所建索引起作用: • 打开表的浏览窗口,选择系统主菜单中的“表│属性”,在随后弹出的如图所示“工作区属性”对话框中,从“索引顺序”列表框中选择所需索引名称,按“确定”按钮。 “工作区属性”对话框
6.3索引文件的使用 • 要使得索引文件生效,它必须处于打开状态。除结构复合索引文件能随表的打开而自动打开外,其他的索引文件则要在打开数据表文件的同时用命令打开相应的索引文件。 • 另外,若要使与数据表密切相关的索引文件随着数据表文件的变化进行相应的自动修改,也必须打开相关的索引文件(结构复合索引文件除外)。
6.3.1 主控索引文件和主控索引标识的概念 • 尽管可以对某一数据表建立多个不同类型的索引文件,而且一个表可以同时打开多个索引文件,但在任一时刻,表的显示或访问只能由一个单索引文件(.IDX)或一个来自复合索引文件(.CDX)的索引标识来控制,这个起作用的索引文件即为主控索引文件;如果主控索引文件有多个索引标识,则当前起作用的标识即为主控索引标识。
注意: • ◆用INDEX命令建立好单索引文件后,该单索引文件自动处于打开状态并作为当前主控索引文件生效。 • ◆用INDEX命令建立或添加好复合索引文件的标识后,当前建立的索引标识为主控索引标识。 • ◆如果当前仅有一个索引文件被打开,它就成为主控制索引文件。 • ◆当表文件重新打开时,尽管复合索引文件已自动打开,如有多个索引标识,还需确定主控索引标识。
6.3.2打开索引文件 • 一、命令方式 • 1.打开单索引文件 • ⑴打开数据表文件的同时打开单索引文件 • Use <数据表文件名> Index <单索引文件名│单索引文件名表> [Ascending│ Descending] [Exclusive] [Shared] [NoUpdate]
说明: • ◆[Ascending/Descending]:暂时强制性地使记录以索引表达式的值按递增或递减排序方式显示。 • ◆[Exclusive]:表示以独占的方式打开数据表,主要用于单用户系统中。 • ◆[Shared]:表示以共享的方式打开数据表,主要用于网络或多用户系统中。 • ◆[Noupdate]:表示打开的数据表将禁止任何编辑修改。
⑵打开数据表文件后打开单索引文件 • 若在打开数据表文件时没有同时打开单索引文件,可以在需要的时候使用下列命令打开相应的单索引文件: • Set Index To [单索引文件名] [Order <单索引文件名>][Ascending│Descending] [Additive] • 说明: • ◆[ORDER<单索引文件名>]:用于确定主控索引文件名。
【例】若在学生档案表.DBF中,已经建立了以年龄字段为索引关键字的单索引文件NL.IDX索引文件,以学号和年龄为索引表达式的XHNL.IDX单索引文件。现在来打开它们,请分析下列语句的含义:【例】若在学生档案表.DBF中,已经建立了以年龄字段为索引关键字的单索引文件NL.IDX索引文件,以学号和年龄为索引表达式的XHNL.IDX单索引文件。现在来打开它们,请分析下列语句的含义: • 方式一: • Use 学生档案INDEX NL,XHNL • List fields 学号,姓名,性别,年龄 for 性别=“女” • 方式二: • USE 学生档案 • set INDEX to NL,XHNL orde xhNL • List fields 学号,姓名,性别,年龄 for 性别="女"
2. 打开非结构化复合索引文件 • ⑴打开数据表文件的同时打开非结构化复合索引文件并确定主控索引标识 • Use <数据表文件名> Index <非结构化复合索引文件名> [Order [Tag] <标识符>] [Ascending│Descending] [Exclusive] [Shared] [NoUpdate]
⑵打开数据表文件后打开非结构化复合索引文件⑵打开数据表文件后打开非结构化复合索引文件 • Use <数据表文件名> [excl/shar][noupdate] • Set index to <非结构化复合索引文件名> order [tag] <标识符名> [Ascending|Descending] • [Additive] • 说明: • ◆Order [Tag] <标识符>:用于确定主控索引标识。
【例】非结构化复合索引文件XMBJCJ.CDX包括CJ、XMBJ两个索引标识符,现要求将主控索引标识设置为XMBJ。其命令语句为:【例】非结构化复合索引文件XMBJCJ.CDX包括CJ、XMBJ两个索引标识符,现要求将主控索引标识设置为XMBJ。其命令语句为: • USE 学生档案 INDEX XMBJCJ ORDER XMBJ • 3. 打开结构化复合索引文件 • 结构化复合索引文件随数据表文件的打开而自动打开,不需要用单独的命令将其打开。
二.打开索引文件的菜单方式 • ⑴选择系统菜单“文件”、“打开”,弹出“打开”对话框,在“文件类型”列表框中选择“索引”,在“文件名”文本框中输入索引文件名后单击“打开”按钮或双击要打开的索引文件名。 • ⑵单击“显示”主菜单下的“浏览”选项。 • ⑶单击“表” 主菜单下的“属性” 选项,在随后弹出的“工作区属性”对话框中,从“索引顺序”列表框中选择所需索引名称,按“确定”按钮。 • ⑷在“窗口” 主菜单下的“数据工作期”窗口中点击“属性”按钮,同样可以打开“工作区属性”对话框,从“索引顺序”列表框中设置主控索引。
6.3.3 指定主索引文件和主控索引标识 • 如果一个结构复合索引文件创建有多个索引标识,或者打开了多个单索引文件和非结构化复合索引文件,都存在一个如何确定主控索引文件或主控索引标识的问题。 • ⑴确定结构复合索引文件的主控索引 • Use <数据表文件名> • Set Order To [Tag] <主控索引标识>
【例】结构复合索引文件学生档案.CDX包括CJ、BJJG、XH三个索引标识,要求将主控索引标识先后设置为BJJG、XH、CJ。【例】结构复合索引文件学生档案.CDX包括CJ、BJJG、XH三个索引标识,要求将主控索引标识先后设置为BJJG、XH、CJ。 • 其命令为: • USE 学生档案 • SET ORDER TO BJJG && 使主控索引标识为BJJG • SET ORDER TO XH && 使主控索引标识为XH • SET ORDER TO CJ && 使主控索引标识为CJ
⑵确定非结构化复合索引文件主控索引标识 • Use <数据表文件名> Index <非结构化复合索引文件名> • Set Order To [Tag] <主控索引标识> Of <非结构化复合索引文件名> • 对于具有多个索引标识的非结构化复合索引文件,需要事先打开非结构化复合索引文件后,再确定主控索引标识。
【例】非结构化复合索引文件XMBJCJ.CDX包括CJ、XMBJ两个索引标识符,现要求将主控索引标识先后设置为XMBJ 、CJ。 • 其命令为: • USE 学生档案INDEX XMBJCJ • SET ORDER TO XMBJ OF XMBJCJ • SET ORDER TO CJ OF XMBJCJ • ⑶确定主控单索引文件 • Set Index To <单索引文件名>
6.3.4 关闭索引文件 • 关闭索引文件有三种方式: • ⑴关闭数据表文件的同时索引文件就随之关闭(结构复合文件只能用这种方法关闭) • Close All(关闭所有的数据表文件) • Use(关闭当前打开的数据表文件)。 • ⑵关闭所有的索引文件 • Close Indexes • ⑶仅关闭当前的索引文件 • Set Index To