VFP索引与排序
vfp实验6表的索引、排序、统计
vfp实验6表的索引、排序、统计
实验六表的索引、排序、统计
一、实验目的
1、理解表的4种索引类型,熟悉单项索引和复合索引的建立和应用;
2、掌握记录排序命令sort to的应用方法;
3、掌握表的常用统计命令;
二、实验内容
注意:数据文件务必存放在 D 盘!
用你的学号在D 盘下建立一个文件夹(如08514101),将文件正确保存到该文件夹中。
为方便文件打开和调试,可以用SET DEFAULT TO 修改系统的文件存放默认路径,如:SET DEFAULT TO D:\08514101
1、打开表xsda.dbf,完成以下操作:
(1)使用单项索引将表中的记录按出生日期降序
..排列显示,生成csrq.idx 文件;
(2)使用复合索引将表中的记录按性别显示不同地区的记录信息,索引标识符为xbjg;
(3)使用复合索引将表中的记录按性别降序显示男女学生的入学成绩信息,索引标识符为xbrxcj;
(4)制定当前索引为xbjg,重新显示操作(2)的结果;
2、利用表xsda.dbf的字段xh、xm、jg、rxcj和zy,生成排序文件zfpx.dbf,排序的文件按总分降序排列(sort to…on);
3、打开xscj.dbf表,分别统计不同科目的平均分,并将统计结果存在不同的变量中;
文件上交:
访问ftp://219.222.113.14,用户名:vfp8,密码:000,将你的文件以“实验
6学号姓名.rar”上传到“上传区”中,如“实验608514101蔡
梦雅.rar”。
VFP基础教程第三章VFP表的索引
3.5 表的索引
1. 基本概念
记录的顺序:
物理顺序:即表中记录的存储顺序。
⽤记录号表⽰。
逻辑顺序:表打开后被使⽤时记录的处理顺序。
索引:
指按表⽂件中某个关键字段或表达式建⽴记录的逻辑顺序。
它是由⼀系列记录号组成的⼀个列表,提供对数据的快速访问。
索引不改变表中记录的物理顺序。
表⽂件中的记录被修改或删除时,索引⽂件可⾃动更新。
索引关键字(索引表达式):⽤来建⽴索引的⼀个字段或字段表达式。
注意:1)⽤多个字段建⽴索引表达式时,表达式的计算结果将影响索引的结果;
2)不同类型字段构成⼀个表达式时,必须转换数据类型。
索引标识(索引名):
即索引关键字的名称。
必须以下划线、字母或汉字开头,且不可超过10个字。
索引类型:主索引、候选索引、普通索引、索引。
主索引:
组成主索引关键字的字段或表达式,在表的所有记录中不能有重复的值。
主索引只适⽤于数据库表的结构复合索引中。
⾃由表中不可以建⽴主索引;数据库中的每个表可以且只能建⽴⼀个主索引。
候选索引:
在指定的关键字段或表达式中不允许有重复值的索引。
在数据库表和⾃由表中均可为每个表建⽴多个候选索引。
普通索引:
也可以决定记录的处理顺序,但是允许字段中出现重复值。
在⼀个表中可以加⼊多个普通索引。
索引:
参加索引的关键字段或表达式在表中可以有重复值,但在索引对照表中,具有重复值的记录仅存储其中的第⼀个。
vfp上机练习题_索引与排序
vfp上机练习题_索引与排序排序与索引将sb.dbf复制到D盘根目录下的xxx文件夹(xxx可用任意字母代替),执行命令:SET DEFAULT TO D:\XXX。
一、表的排序命令SORT示例1:将所有设备按部门降序排列,部门相同时按价格升序排列USE SBSORT TO bmjg ON 部门/D,价格/AUSE bmjgLIST示例2:将所有设备按部门升序排列,部门相同按启用日期降序排列,要求只包含编号、名称、启用日期及部门4个字段。
USE sbSORT TO bmrq ON 部门/A,启用日期/D FIELDS 编号,名称,启用日期,部门USE bmrqLIST2(表的索引命令建立索引的命令示例1:为设备表以价格字段作为索引关键字建立普通索引,要求降序排列USE sbINDEX ON 价格 TAG jg DESCENDINGLIST示例2:为设备表以编号作为索引关键字建立候选索引,要求升序排列USE sbINDEX ON 编号 TAG bh ASCENDING CANDIDATELIST示例3:为设备表以启用日期作为索引关键字建立普通索引,要求降序排列USE sbINDEX ON 启用日期 TAG qyrq DESCENDINGLIST示例4:为设备表建立索引,要求按部门升序排列,部门相同时按启用日期升序排列USE SBINDEX ON 部门+DTOS(启用日期) TAG bmrq ASCENDINGLIST示例5:为设备表建立索引,要求按部门降序排列,部门相同时按价格降序排列USE sbINDEX ON 部门+str(价格,9,2) TAG bmjg1 DESCENDINGLIST示例6:为设备表建立索引,要求按部门升序排列,部门相同时按价格降序排列USE sbINDEX ON val(部门)-价格/1000000 TAG bmjg2 ASCENDINGLIST示例7:为设备表建立索引,要求按部门降序排列,部门相同时按价格升序排列USE sbINDEX ON val(部门)-价格/1000000 TAG bmjg3 DESCENDINGLIST注意:比较示例6和示例7确定主控索引的命令示例1:确定jg为当前主控索引SET ORDER TO TAG jg示例2:确定bmjg2为当前主控索引SET ORDER TO bmjg2二、用SELECT-SQL命令建立查询1(单表查询示例查询所有设备信息SELECT * FROM sb查询价格在一万元以上的设备信息SELECT * FROM sb WHERE 价格>=10000查询价格在一万元以上、十万元以下的设备的编号、名称及价格SELECT 编号,名称,价格 FROM sb WHERE 价格>=10000 AND 价格<=100000 查询所有设备的编号、名称及价格,并按价格降序排列SELECT 编号,名称,价格 FROM sb ORDER BY 价格 DESCENDING查询按价格由高到低排列后的前3条记录SELECT * FROM sb ORDER BY 价格 DESCENDING TOP 3 ? 查询价格在一万元以上的设备台数SELECT COUNT(*) AS 万元以上设备台数 FROM sb WHERE 价格>=10000 查询主要设备和非主要设备的台数SELECT 主要设备,COUNT(*) AS 设备台数 FROM sb GROUP BY 主要设备查询资产总额SELECT SUM(价格) AS 资产总额 FROM sb ? 查询各部门资产额SELECT 部门,SUM(价格) AS 部门资产额 FROM sb GROUP BY 部门查询各部门资产额,仅列出部门资产在一万元以上的记录,并按部门资产额降序排列SELECT 部门,SUM(价格) AS 部门资产额 FROM sb GROUP BY 部门;HAVING SUM(价格)>=10000 ORDER BY 2 DESCENDING ? 查询各设备的累计增值金额SELECT 编号,SUM(增值) AS 累计增值金额 FROM zz GROUP BY 编号查询累计大修费用在五千元以上的设备编号及累计大修费用SELECT 编号,SUM(费用) AS 累计大修费用 FROM dx GROUP BY 编号;HAVING 累计大修费用>=50002(多表查询示例查询所有设备的编号、名称、价格及所在部门的名称 ? SELECT sb.编号,sb.名称 AS 设备名称,sb.价格,bmdm.名称 AS 部门名称;FROM sb,bmdm WHERE sb.部门=bmdm.代码SELECT sb.编号,sb.名称 AS 设备名称,sb.价格,bmdm.名称 AS 部门名称;FROM sb JOIN bmdm ON sb.部门=bmdm.代码 ? 查询部门资产额在十万元以上的部门名称及资产额,并按资产额降序排列SELECT bmdm.名称,SUM(sb.价格) AS 部门资产额 FROM sb,bmdm;WHERE sb.部门=bmdm.代码 GROUP BY 部门;HAVING 部门资产额>=100000 ORDER BY 2 DESCENDING ? SELECT bmdm.名称,SUM(sb.价格) AS 部门资产额;FROM sb JOIN bmdm ON sb.部门=bmdm.代码 GROUP BY 部门;HAVING 部门资产额>=100000 ORDER BY 2 DESCENDING ? 查询增值设备的名称及累计增值金额,并按累计增值金额降序排列SELECT sb.名称,SUM(zz.增值) AS 累计增值金额 FROM sb,zz;WHERE sb.编号=zz.编号 GROUP BY zz.编号 ORDER BY 2 DESCENDINGSELECT sb.名称,SUM(zz.增值) AS 累计增值金额FROM sb;JOIN zz ON sb.编号=zz.编号 GROUP BY zz.编号 ORDER BY 2 DESCENDING 查询累计大修费用在五千元以上的设备名称及累计大修费用SELECT sb.名称,SUM(dx.费用) AS 累计大修费用 FROM sb,dx;WHERE sb.编号=dx.编号 GROUP BY dx.编号 HAVING 累计大修费用>5000SELECT sb.名称,SUM(dx.费用) AS 累计大修费用 FROM sb JOIN dx;ON sb.编号=dx.编号 GROUP BY dx.编号 HAVING 累计大修费用>5000 查询增值设备的名称、所在部门名称及累计增值金额 ? SELECT sb.名称 AS 设备名称,bmdm.名称 AS 部门名称,;SUM(zz.增值) AS 累计增值金额 FROM sb,bmdm,zz;WHERE sb.部门=bmdm.代码 AND sb.编号=zz.编号;GROUP BY zz.编号SELECT sb.名称 AS 设备名称,bmdm.名称 AS 部门名称,;SUM(zz.增值) AS 累计增值金额;FROM sb JOIN bmdm ON sb.部门=bmdm.代码 JOIN zz ON sb.编号=zz.编号;GROUP BY zz.编号查询大修过的设备名称、所在部门名称及累计大修费用SELECT sb.名称 AS 设备名称,bmdm.名称 AS 部门名称,;SUM(dx.费用) AS 累计大修费用 FROM sb,bmdm,dx;WHERE sb.部门=bmdm.代码 AND sb.编号=dx.编号;GROUP BY dx.编号SELECT sb.名称 AS 设备名称,bmdm.名称 AS 部门名称,;SUM(dx.费用) AS 累计大修费用;FROM sb JOIN bmdm ON sb.部门=bmdm.代码 JOIN dx ON sb.编号=dx.编号; GROUP BY dx.编号三、用查询设计器建立查询1(建立查询的命令CREATE QUERY <查询文件名>MODIFY QUERY <查询文件名〉示例:CREATE QUERY cx1MODIFY QUERY cx2注意:查询文件的扩展名为.qpr2(运行查询的命令DO <查询文件名〉示例:DO cx1.qprDO cx2.qpr注意:命令中查询文件的扩展名不可省略3(练习用查询设计器建立单表及多表查询。
《VFP索引与排序》
.
操作示范
.
创建索引
• 命令法:
结构化索引
可以与字 段同名
➢Index On <索引表达式> Tag <索引标识名>[For 条
件] [Ascending|Descending] [Unique|Candidate]
升序|降序
唯一索引 候选索引
由多个关键字段值和其对应的多个记录的物理位置 构成。(一个索引文件中有多张“对照表”)
–结构化复合索引文件
索引文件名与表文件同名(由系统自动生成)
其打开和关闭与表文件同步,是表的一部分。
表文件修改时,系统自动更新该索引文件。
.
不常用的索引或 临时性的索引
–非结构化复合索引 索引文件名由用户给出,要用专门的命令打开。 可随表文件关闭也可用命令关闭。
菜单操作中默 认是升序排列
转为数值型函数:VAL(数字字符型数据,长度)
例:val(工作部门)+基本工资
则原题意写为 val(工作部门)*10^6-基本工资*100
.
创建索引实例1
关键字表达式为C型和D型时,要将日期型数据转为
字符型数据,再用字符型连接符号“+”连接。
函数:DTOC(日期型数据) DTOS(日期型数据)
.
索引的类型 • 主索引(Primary Indexes)
– 每张表只能有一个。一般为表的关键字或索引表 达式的值没有重复值的才能作为主索引。
– 只存在数据库表中的结构复合索引中。
• 候选索引(Candidate Indexes)
– 可有多个。一般为表的关键字或索引表达式的值 没有重复值的才能作为候选索引。
Visual FoxPro排序、索引与查询统计
2020/2/14
目录 6
4-2-3 关闭索引文件
【命令1】USE 【功能】关闭打开的表文件及所有索引文件 【命令2】SET INDEX TO [0] 【命令3】CLOSE INDEX 【功能】关闭打开的所有单索引文件
2020/2/14
有第一个索引文件起作用,该索引称为主控索引
【命令】
SET ORDER TO [<数值表达式>/<索引文件名
>]【功能】指定主控索引
【说明】 [数值表达式]指定该数值号的索引为主控
索引;其值为0或缺省,则关闭已打开的索引,
以原表记录的物理顺序进行处理。
2020/2/14
目录 9
4.3 表记录查询
4-3-1 顺序查询 4-3-2 索引查询
(1)如果找到,则把记录指针指向该记录,并且将 FOUND()函数的值为“真”;
(2)如果没有找到与其相符的记录,则将记录指针 指向表的末尾,且将FOUND()函数的值置为“假 ”,将EOF()函数的值置为“真”。
2020/2/14
目录 12
(3) 如果有多个与关键字匹配的记录,则记录指针 定位于其中的第一条记录上,若查询后续记录, 可用SKIP
2020/2/14
目录 15
4-4-1 统计记录数
【命令】COUNT [TO <内存变量>] [<范围>][FOR <条件>][WHILE <条件
>] 【功能】统计指定范围内满足条件的记录个数 【说明】默认的范围是ALL
使用TO <内存变量>可将统计的结果保 存到指定的内存变量
第3章 VFP 6.0数据库及其操作(3)
7
3.6.1 数据表排序
2. 命令
SORT TO <文件名> ON <字段名1> [/A][/D][/C] [,<字段名2> [/A][/D][/C]…] [ASCENDING|DESCENDING][<范围>] [FOR<条件>][WHILE<条件>][FIELDS<字段名表>]
功能:将当前数据表中指定范围内满足条件的记录, 按指定字段的升序或降序重新排列,并将排序后的记 录按FIELDS子句指定的字段写入新的表文件中。
3
3.6.1 数据表排序
2. 命令
SORT TO <文件名> ON <字段名1> [/A][/D][/C] [,<字段名2> [/A][/D][/C]…] [ASCENDING|DESCENDING][<范围>] [FOR<条件>][WHILE<条件>][FIELDS<字段名表>]
(1)菜单:打开浏览窗口,选择“表|属性”命令, 打开 “工作区属性”对话框,在“索引顺序”框中选 择一个索引项,浏览窗口中的记录就会按按照该索引 顺序排列。
24
3.6.2 数据表索引
选择索引顺序
“工作区属性”对话框:设置索引顺序
25
3.6.2 数据表索引
(2)命令:SET ORDER TO [TAG <索引标识名>] 功能:在打开的复合索引文件中设置一个索引标识 作为主标识(当前索引),使数据表中的记录按该索 引顺序处理。
vfp第二次课 表的排序和索引
3. 唯一索引
系统只在索引文件中保留第一次出现的索引 关键字值. 关键字值. 数据库表和自由表都可以建立唯一索引
21
4. 普通索引
是一个最简单的索引, 是一个最简单的索引 , 允许关键字值的重复 出现, 适合用来进行表中记录的排序和查询. 适合用来进行表中记录的排序和查询. 数据库表和自由表都可以建立普通索引. 数据库表和自由表都可以建立普通索引.
22
三,索引文件的建立
1. 命令方式 【格式】 格式】 INDEX ON <索引表达式> TO<单索引文件名>; [ TAG <复合索引标识名>]; [OF <非结构复合索引文件名>]; [FOR <逻辑表达式>]; [COMPACT]; [ASCENDING | DESCENDING]; [UNIQUE] ; [CANDIDATE]; [ADDITIVE] 功能】 【 功能 】 对当前表文件按指定的关键字建立索 引文件. 引文件. 23
13
索引文件必须与原表一起使用, 索引文件必须与原表一起使用,查询时 一起使用 根据索引关键字表达式的值先在索引文 件中找到某字段所在的记录号, 件中找到某字段所在的记录号,然后再 到表里直接定位. 到表里直接定位.这样的查找方式使顺 序查找和随机查找都有较高的效率. 序查找和随机查找都有较高的效率. 打开索引文件时, 改变表中记录的 表中记录的逻 打开索引文件时,将改变表中记录的逻 辑顺序, 并不改变表中记录的 辑顺序,但并不改变表中记录的物理顺 表中记录的物理顺 序.
17
复合索引文件又有两种: 复合索引文件又有两种: 一种是非结构(独立)复合索引文件; 另一种是结构复合索引文件.
非结构复合索引文件不与表文件同名,扩展 不与表文件同名,
VFP第4章 索引、排序与多表操作
教案讲稿第 4 章索引、排序与多表操作[旧课复习]:复习内容:以互动方式了解学生对vfp表的创建、编辑与维护命令的掌握程度复习目的:了解学生对vfp数据库表操作命令的掌握程度及层次情况复习时长:大约5分钟[新课导入]:导入方式:解读数据库应用已普及到社会的方方面面,数据库表的操作是数据库使用的最基本方法。
导入目的:增强学生学习掌握数据库的基本操作,数据库的使用方法的积极性导入时长:大约5分钟[新课讲授]:重点:索引的分类、建立、使用及查询;数据完整性;数据库表与自由表难点:数据库表的临时关联和永久关系的建立。
方法:运用多媒体辅助教学,采用案例教学和任务驱动等教学法。
*4.1 排序4.2 索引1. 索引的概念与排序相比,索引是一种逻辑排序方法,它不改变记录的物理上的排序顺序,而是建立一个与原文件箱对于的索引文件,索引文件中存储了一组记录指针,它指向原文件的记录。
2. 索引的分类四种索引:普通索引,唯一索引,候选索引,主索引普通索引和唯一索引允许索引关键字在表中的记录有重复的值,但唯一索引只记录重复的第一条记录。
主索引、候选索引不允许重复值,候选索引作为主索引的候选。
在自由表或数据库表中可以建立多个普有通索引、唯一索引、候选索引。
主索引只能在数据库表中建立,且一个数据库表只能建立一个主索引。
主索引主要用来在永久关系中建立参照完整性设置。
3.索引文件的种类–打开索引文件并不–对记录的操作顺序产生影响,–当设置主控索引之后,–才影响操作顺序。
4.索引的建立(1)命令方式●建立索引文件格式:INDEX ON 索引表达式TAG索引标识名[OF CDX文件名] | TO 索引文件名[FOR 条件] [ASCENDING | DESCENDING][UNIQE | CANDIDA TE]其中ON 索引表达式:指定索引关键字。
TAG索引标识名:指定索引标识名。
选OF CDX文件名,表示创建非结构化复合索引,OF后指定的是存放该索引的文件名。
Visual FoxPro6.0程序设计教程第四章 索引、排序与多表操作
每次表打开时自动打 索引 开,并且在表修改时 自动更新的索引文件, 通常与表同名,但扩 展名是.CDX
VFP6.0索引文件
结构复合索引文件 复合索引文件(· CDX )
包含多个索引入口的索 引文件,在使用时需明 确指定打开
非结构复合索引文件
4.2 索引
4.2.2 索引的分类
三种索引文件的比较
索引类型
4.1 排序 对表文件进行物理位置的整理
命令格式:Sort To <表文件名> On <字段名1>[/A] [/D] [/C] [,<字段名2 >[/A] [/D] [/C]…] [Ascending | Descending] [For <条件表达式>] [Fields <字段名表>]
4.1 排序
独立 .idx
描述 必须明确的打开, .idx的基本 名由用户定义 必须明确的打开,使用和表名 不同的基本名 使用和表文件名相同的文件名, 和表一起自动打开
计算机二级visual foxpro 课件8 排序和索引
二、 索引
1、为什么要讲索引? 、为什么要讲索引? 排序要产生一个表,数据量大时占用存储空间;排序不能自动更新, 排序要产生一个表,数据量大时占用存储空间;排序不能自动更新,这对工 作带来不便。必须达到既能排出大小,又不重新产生新表的效果。 作带来不便。必须达到既能排出大小,又不重新产生新表的效果。 2、什么是索引? 、什么是索引? 索引是关键表达式按大小顺序排列与记录号对应的对照表. 索引是关键表达式按大小顺序排列与记录号对应的对照表 每一个对照表有一个名称,称为索引名。 每一个对照表有一个名称,称为索引名。 3、索引的类型 、 索引按其关键表达式的性质和对照表特点,可分为四种类型。 索引按其关键表达式的性质和对照表特点,可分为四种类型。
命令:SORT ON <字段名 字段名1>[/A][/D][/C] [,<字段名 命令 字段名 , 字段名 2>[/A][D][/C]…] TO <新表名 新表名> [范围 条件 字段名清单 范围][条件 字段名清单] 新表名 范围 条件][字段名清单 功能:对当前表中规定范围内符合条件的记录 按给定的字段值按由小到大的 功能 对当前表中规定范围内符合条件的记录,按给定的字段值按由小到大的 对当前表中规定范围内符合条件的记录 升序或由大到小的降序排列,生成指定名称的新表文件, 升序或由大到小的降序排列,生成指定名称的新表文件,新表文件中含有由 FIELDS指定的字段。 指定的字段。 指定的字段 参数说明:/ASC表示按升序排列,为系统的默认值; 表示按升序排列,为系统的默认值; 参数说明 表示按升序排列 /DESC表求降序排列; 表求降序排列; 表求降序排列 /C表示不区分大小写字母。 表示不区分大小写字母。 表示不区分大小写字母 后面带多个字段时, 后面带多个字段时 称为多重排序,首先按第一个字段值( 多重排序: 多重排序 当ON后面带多个字段时,称为多重排序,首先按第一个字段值(称 为主关键字)进行排序,遇到第一个关键字段等值的情况下, 为主关键字)进行排序,遇到第一个关键字段等值的情况下,再按 第二个关键字段排序,依此类推。 第二个关键字段排序,依此类推。 例: 1.对BOOKS.DBF,按数量从高到低排序 对 , 2.对BOOKS.DBF,按作者降序排序,作者相同的,按借出数量升序排序 按作者降序排序, 对 按作者降序排序 作者相同的,
《VFP索引与排序》
精选课件
18
创建索引
• 命令法:
结构化索引
可以与字 段同名
➢Index On <索引表达式> Tag <索引标识名>[For 条
件] [Ascending|Descending] [Unique|Candidate]
升序|降序
唯一索引 候选索引
非结构化索引
➢Index On <索引表达式> Tag <索引标识名> OF <索 引文件名.CDX> [For 条件][Ascending|Descending] [Unique|Candidate]
精选课件
19
创建索引
• 命令法:
结构化索引
➢Index On <索引表达式> Tag <索引标识名>[For 条
件] [Ascending|Descending] [Unique|Candidate]
升序|降序
唯一索引 候选索引
主索引的建立
可以不打开但建立 索引后自动被打开
➢Alter table <数据库表名> add primary key <索引 表达式> Tag <索引标识名>
表达式> Tag <索引标识名>
对库表建主索引
➢Index On <索引表达式> To <索引文件名>
[Compact[Unique]] [Additive]
单索引
精选课件
30
索引打开
单或非结构
➢Use 表文件名 Index 索引文件名表 表、索同时
➢Set Index To <索引文件名表> [Additive]
数据库(VFP)实验报告-排序、索引、查询、数据工作期
index on 出生日期 tag csrq desc candidate
6、重新打开student表,确定第4题建立的索引为主控索引,并显示表数据信息
set index to xb
7、确定第5(3)题索引为主控索引,并显示表数据信息
setorder to tag csrq
数据库(VFP)实验报告-排序、索引、查询、数据工作期
实验名称:排序、索引、查询、数据工作期
实验目的:通过实验练习,掌握排序与索引的命令知识和上机操作方法,掌握顺序查询与索引查询的概念知识和上机操作命令使用,掌握数据工作期的使用。
实验原理(预习内容):
实验器材(软件):Visual FoxPro
实验结果分析与小结:
sort to student4 on 系别 /D for 出生日期>{^1985/01/01}
use student4
list
3、将学生按系别排序,当系别相同时则按姓名升序排序生成新文件student5
sort to student5 on 系别,姓名
4、建立系别是升序排列的单索引文件,并显示索引后的结果。
select 1
use repto xh
select 2
use student
set relation to 学号 into reportcard
list 学号,姓名,reportcard.高等数学
使用命令建立employee表和contribution表之间的关联,浏览出每个职员的姓名、每次捐款的时间及捐款金额
打开employee表,求出所有职工工资的平均值,并将结果保存到内存变量a中
use employee
计算机二级VFP 实验7 排序与索引
实验五排序命令一、实验目的1、排序命令sort、index二、实验内容1、排序命令sortuse 学生listsort to rx on 入校总分/d fields 学号,姓名,入校总分(其中:sort ——对当前表排序To rx ——生成的新表文件名on 入校总分/d ——按“入校总分”字段值从高到低(降序)排列记录顺序fields 学号,姓名,入校总分——新表包含的字段use rx && 打开生成的新表“rx”list && 查看“入校总分”表记录的排列顺序Use 学生Sort to dd on 性别,出生年月/d fields 学号,姓名,性别,出生年月ListUse dd 注意查看dd表的结构(字段)与记录顺序根据要求写出命令:对“学生“中的男生记录按出生年月降序排列。
2、排序命令index(知识点:索引文件、索引类型)注意:两条命令格式的差别use 学生index on 入校总分to zf && 按入校总分建立单索引文件zflist && 显示建立索引后的记录顺序请问:在默认目录下增加的文件名和扩展名是什么?use 学生index on 姓名tag xm descending&& 以姓名降序排列,建立索引标识为xm 的复合索引。
Go top?recno() &&返回的记录号是Skip -1?recno() &&返回的记录号是请问:在默认目录下增加的文件名和扩展名是什么?根据下列要求写出相应命令1)、对课程.dbf按课程名称字段建立索引标识名为kc 的候选索引;2)、对课程.dbf按课时字段为建立名为Ks的单索引文件;根据要求写出命令:利用学生.dbf,在第6条后添加一条记录,给学号、姓名、性别、入校总分字段添加如下字段值(“071111”,“刘建”,“男”,570)将课程表中所有姓“李”的记录物理删除:利用学生成绩.dbf,计算每个学生的总成绩,其中“听力”和“口语”各占总分的30%,笔试占总分的40%。
vf4-索引和排序
索引:
索引就是一种为方便查找而建立的一个查找标识,通过索引使我们可以按不同的顺序来处理表里的记录处理有哪些(定位,查看,操作)
索引可以是一个或多个。
索引的分类:
主索引:在表中没有出现重复值的字段或字段组合才可以做主索引。
主索引可以起到主关键字的作用
一个表中只能有一个主索引。
建立主索引的字段可以看做是主关键字
唯一索引:不做深入了解,为了保持同早期版本的兼容性,唯一性是指索引项的唯一不是指字段值的唯一可以有多个
候选索引:与主索引性质相同,在表中没有出现重复值的字段或字段组合才可以做,但一个表中可以有多个候选索引建立候选索引的字段可以看做是候选关键字
普通索引:普通索引也可以决定处理记录的顺序它不仅允许字段中出现重复值而且索引项中也允许出现重复值
创建索引:主要手段通过表设计器
使用索引的命令:
index on 索引表达式tag 索引名
set order to [tag] 索引名(使用索引)
delete tag 索引名(删除索引)
delete tag all (删除所有索引)
排序:
索引可以使我们按照某种顺序来查看记录,这样的顺序只是逻辑上实现的。
而排序将记录物理地按顺序重新排列
其实是先按照某种顺序排序后然后按照这种顺序将记录存入另外一个表
操作步骤:
1 先打开排序的表
2 命令:sort to 新表名on 排序字段/ac 升序不区分大小写/dc 降序不区分大小写
例子:
use 职工表
sort to 学籍表1.dbf on 身份证号/ac
use 学籍表1
list。
VF数据库第8章索引及记录操作
说明: ① 执行命令前,必须首先建立以查询内容所在字段或表 达式为索引关键字的索引文件,若已存在则打开该索引 文件,且将其设置为主索引。 ② FIND命令通常适用于字符数据类型及数值型,字符串 中的字符可以不用定界符。 ④ 如果查找成功,则把记录指针指向逻辑顺序中第一条 符合条件的记录,且FOUND()函数的值为.T.,否则, 记录指针指向文件未尾,FOUND()函数的值为.F.。
另外建立一个数据号列表。索引文件不能单独使用,必须同源数据表文
件一起使用。
❖ 索引一旦建立后,就产生了一个相应的索引文件。索引文件中只包含两 项信息:一是每条记录索引关键字表达式的值,另一项是与其对应的记 录号。既在索引文件中只保留索引关键字和记录号信息,并不存在记录 的字段数据,因此它不能单独使用,必须同时打开原数据文件,才能使 索引文件有效。
USE 学生档案表 INDEX xh
&&打开以学号为索引关键字的索引文件XH.IDX
SEEK “9921205”
&&必须使用定界符
DISPLAY
小结: 1) LOCATE和SEEK、FIND都是用于在数据表文件中查询 2) 定位记录指针,即把记录指针定位在满足条件的记录 3) 上。特别强调:仅仅是定位记录指针。如要显示定位
格式:SEEK <表达式> 功能:在打开的以查询内容所在字段为索引关键字的索 引文件中,快速查找关键字段等于<表达式>值的第一个 记录。
其中: (1)SEEK命令适用于一切数据类型(C、N、D、L),表达 式可以是常量、变量和函数所组成,但必须与索引表达式 一致。表达式为C、D、L(.T.,.F.)常量时,必须使用 相应的定界符,如:“ ”、{ }。 (2)表达式为变量时,要直接使用,不需要用宏代换函
04 Visual Foxpro中的数据表的排序与建立索引
如果第一个是.idx文件,其中的单 索引项起作用; 如果第一个不是.idx文件,所有索引 项不起作用。这时系统自动给打开的索 引项编号,首先是.idx文件,然后是结构 .cdx文件的索引项,最后是非结构.cdx文 件的索引项。
(2) 指定主控索引项 如果要让索引项起作用,也就是成为 主控索引项,运用以下命令。 格式1:set order to [<expN>] [ascending|descending] 第N号索引项起作用,<expN>是系 统自动为打开的索引项编的号。 格式2:set order to [<.idx文件名>] [ascending|descending]
4.3 数据表的排:按照某种规则
将记录重新排序,并将重 新排列的记录生成一个新 的数据表文件。
逻辑排序:不改变记录的
物理顺序,建立索引文件
索引排序的说明: 通过建立索引文件,进行逻辑排序, 并不改变记录的物理顺序,而是按索引关 键字或索引表达式的值来建立记录的逻辑 顺序。 索引排序所生成的索引表,记载了 记录的关键字值或索引表达式的值,以 及对应的记录号和应有的排列顺序。 索引表和原数据表一起使用,对数 据表操作时,按索引表排序。
4.3.1 物理排序 命令格式: sort on <字段1> [/a][/d][/c] [,<字段 2> [/a][/d][/c]…] to<文件名>[<范围>]
[for <条件>] [while <条件>] [fields<字段
表>][ascending /descending]
1) 缺省范围和条件时,对所有记录排序。 2) /a: 升序,/d: 降序,/c: 不区分字母大小 写。 3) 同时指定/a和/d,/d起作用;缺省则默
VFP第9部分(排序索引及多表操作)
例: 在学生表和选课表中,显示成绩<80 分的学生的学号、姓名、所学课程的课程 号和成绩。
学生管理数据库中的表
系统 环境 设置
表环境 设置
set safety off close all clear select 1 use 学生 alias xs index on 学号 tag xh select 2 use 选课 set relation to 学号 into xs
建立表间的关联
建立数据库文件中表间关联,
一是要保证建立关系的表具有相同 的字段值(关键字值);
二是子表要以该字段建立索引。
建立两个表之间的“一对一”和 “多对一”关联的步骤: ①找到两个表中能够建立关联的字段 (字段名可以不同,类型、宽度、小 数位数必须相同) ②根据关键字值确定父表,再确定子 表; 有重复值为父表 ③先打开子表,建立索引; ④最后打开父表建立关联。
字段
BB
Sele 1 Use AA
AA
inde on 字段 tag zd Sele 2
Use BB
Set rela to 字段 into A(或 AA)
sele 0
use AA
index on 字段 tag zd
sele 0 use BB
set relation to 字段 into AA
AA
2、别名
(1)前十个工作区除了可用1~10来标 识外,还可用A~J来表示工作区的别名。 (2)定义别名
格式:
use
<文件名>
alias
<名>
3、选择当前工作区
如没有给表定义别名, 则可以用数据表名作 为别名。
select <工作区号>|<别名>
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
菜单法选择主控索引 操作 表文件打开且相应的索引文件已打开 要点
① 进入“工作区属性”窗口 “工作数据期“工具按钮,选择“属性”按钮,进 入。 或若为浏览表状态下选择菜单“表\属性”,进入。
②在“工作区属性”窗口的“索引顺序”框中选择索引 标识,按“确定”按钮。
命令法关闭索引文件 关闭索引文件
单索引、非结构复合索引被关,
–自由表中也可建立。
索引的类型 • 普通索引(Regular Indexes)
–一张表可有多个。
–数据库表和自由表均可有。
• 唯一索引(Unique Indexes)
索引表达式中重复的值在索引表中只出现第一个, 忽略重复值。
索引文件的种类
含多个索 引
非结构复合索引
建立时,用 户单独为其 命名
需使用单独命令 打开、关闭
例:val(工作部门)+基本工资
则原题意写为 val(工作部门)*10^6-基本工资*100
创建索引实例1
关键字表达式为C型和D型时,要将日期型数据转为 字符型数据,再用字符型连接符号“+”连接。
函数:DTOC(日期型数据) DTOS(日期型数据)
“工作部门 工作时间” 工作部门+dtos(工作时间)
在数据库中讲解
创建索引
• 命令法:
单索引
快速存 取索引
建立新的索引文件时不 关闭已打开的索引文件
Index On <索引表达式> To <索引文件名> 单索引文件 [Compact[Unique]] [Additive] 只能按升序
创建索引实例2
用命令法对学生.dbf表建立复合索引
1. 以籍贯的升序排列,普通索引,索引标识为jg,并 浏览显示。 2. 按cj1标识,建立以外语成绩降序排列的普通索引。 3. 对男学生以其出生日期降序显示记录。(narq) 4. 以性别升序排列,若性别相同,则按数学成绩降 序排列。(xbcj)
例: a1=“ABCD” a2=“a1” ?&a2 ?”&a1” 与 ?a1等功能 与 ?“ABCD“等功能 结果 ABCD ABCD 结果
?&a1
b1=67 b2=“b1”
结果
没找到变量ABCD
?&b1
查找实例
在学生.DBF中查找 ①查找所有“王”姓同学的记录; Use 学生 inde name Use 学生 Inde on 姓名 tag xm &&若已建立则打开并指定为主控索引 Seek “王” &&find 王 ?Found() &&判断是否找到,若为“T”,则找到了 Disp Skip disp 直到无显示为止 ……
由多个关键字段值和其对应的多个记录的物理位置 构成。(一个索引文件中有多张“对照表”)
–结构化复合索引文件
索引文件名与表文件同名(由系统自动生成)
其打开和关闭与表文件同步,是表的一部分。
表文件修改时,系统自动更新该索引文件。
不常用的索引或 临时性的索引
–非结构化复合索引
索引文件名由用户给出,要用专门的命令打开。 可随表文件关闭也可用命令关闭。 独立索引文件(扩展名为.IDX)(又称之单一索引文件)
任何时侯只有一个主控索引
说明: 菜单法建立的结构复合索引文件虽是打开的,但不 用命令法建立的任一种索引,均为打开,并且直接为 是主控索引,需指定才成为主控索引. 主控索引.
仅有此部分时为出取消主控索引
推荐
设置主控索引
Set
Order To
索引编号 IDX文件名
[TAG] 标识名[OF CDX文件名]
结构
非结构
对库表建主索引 单索引
索引打开
Use Set
单或非结构
表文件名 Index 索引文件名表
表、索同时
Index To <索引文件名表> [Additive]
表已开、再开索
设置主控索引
Set
Order To 索引编号|IDX文件名|[TAG] 标识名[OF CDX文件名] Order To
–索引表达式或索引关键字段的值是确定索引顺序 的依据。
索引的类型 • 主索引(Primary Indexes)
–每张表只能有一个。一般为表的关键字或索引表 达式的值没有重复值的才能作为主索引。
–只存在数据库表中的结构复合索引中。
• 候选索引(Candidate Indexes)
–可有多个。一般为表的关键字或索引表达式的值 没有重复值的才能作为候选索引。
也可用EOF( )函数,找到时该函数值为"F",没找到为"T" 。
Seek中的表达式说明:
–表达式的数据类型有C、N、L、D,但需按各类 型的格式书写。 –字符型变量前无需加“&”
Find中的表达式说明:
–表达式的数据类型只有C、N,字符型数据无需 加定界符。 –字符型变量前需加“&”。
“&”
宏代换函数 将紧随其后的字符型内存变量的值的定界符去掉。
顺序号与记录号(物理顺序) 的对照表。表的逻辑顺序号是 由某一字段的值的大小决定。
索引的概念
索引:不改变物理 顺序,所有关键字 按升(降)排列, 每个值对应原文件 的一个记录号,确 定记录的逻辑顺序
物理顺序 索引
宿舍 电话 5674423 5674524 5674579 记录 编号 4 5 1 2 3 记录 编号 1 2 3 宿舍 电话 5674579 5674586 5674596 宿舍 号码 101 102 103
结构复合索引是取消当前索引
–Set
Index To
–Close
Index
有关索引的命令
建立索引
Index On <索引表达式> Tag <索引标识名>[For 条件] [Ascending|Descending] [Unique|Candidate]
Index On <索引表达式> Tag <索引标识名> OF <索引 文件名.CDX> [For 条件][Ascending|Descending] [Unique|Candidate] Alter table <数据库表名> add primary key <索引 表达式> Tag <索引标识名> Index On <索引表达式> To <索引文件名> [Compact[Unique]] [Additive]
操作示范
创建索引
• 命令法:
结构化索引
可以与字 段同名 Index On <索引表达式> Tag <索引标识名>[For 条件]
[Ascending|Descending] [Unique|Candidate]
升 序 | 降 序 唯一索引 候选索引
非结构化索引 Index On <索引表达式> Tag <索引标识名> OF <索引 文件名.CDX> [For 条件][Ascending|Descending] [Unique|Candidate]
索引与排序
什么是索引和排序 索引的构成和类型
创建索引
索引的编辑和应用 排序的创建和应用
了解索引与排序
记录的顺序
重新组织 数据表数据
– 物理顺序:
表中记录的存储顺序。 按记录输入的前后顺序存放。 – 逻辑顺序: 记录的处理顺序。
排序
索引 对记录按某个(些)字段的值进行排序。
了解索引与排序
排序从物理上对表进行重 新整理,按照指定的关键 字段来重新排列表中数据 记录的顺序,并将重新排 索引实际上是一种排序,但是 它不改变数据表中数据的物理 序的结果形成一个新的数 顺序,而是另外建立一个逻辑 据表。
C N C D
创建索引实例1
关键字表达式为C型和N型时,一般将数值型数据转为 字符型数据,再用字符型连接符号“+”连接;或也
可转为数值型数据:
转为字符型函数:STR(数值型数据,长度[,小数位])
例:工作部门+str(10^6-基本工资*100)
菜单操作中默 认是升序排列
转为数值型函数:VAL(数字字符型数据,长度)
复合索引
(扩展名CDX)
结构复合索引 索引
建立时,用户未 单独为其命名,与 表文件同名 与表同时打开、 关闭 需使用单独命令 打开、关闭
独立(单一)索引
(扩展名IDX)
为与FOXBASE兼容 建立时,用户单独 为其命名
索引文件的种类 复合索引文件(扩展名为.CDX) –定义:
一个索引文件 有多个索引
只存储一个索引的文件,文件名由用户给出,要 用专门命令打开。
创建索引
• 菜单法:
在“表设计器”中创建 (只能创建结构复合索引文件)
注意:
不能对备注型或通用型字段建立索引; 不要建立多余的无用的索引,会降低系统性能; 索引表达式是由多个字段组成时要注意书写格式和数据类 型的一致。即多个索引关键字段名间应用“+“号连接,且 要用函数转换为一样的数据类型。
5. 以姓名降序排列,若姓名相同时,则按出生日期 降序排列。(xmrq)
创建索引实例2
用命令法对学生.dbf表建立复合索引
Use 学生 Inde on 籍贯 tag jg Brow Inde on 外语 tag cj1 desc List Inde on 出生日期 tag narq for 性别=“男” Disp all Inde on 性别+str(100-数学) tag xbcj Disp all Inde on 姓名+dtos(出生日期) tag xmrq desc