440 likes | 545 Views
复习. 表的维护命令. 将逻辑值赋给内存变量 X 的正确方法是 ________ 。 A . X = "T" B . STORE "T" TO X C . X = TURE D . STORE .T. TO X. 计算表达式 (10*5<30 OR .T. AND "X"-"Y"$"XYZ") 时,其运算结果是 ________ 。 A . .F. B . .T. C . T D . F. 记录的逻辑删除和物理删除有什么不同?它们的命令是什么?. 第三章 查询与统计.
E N D
复习 • 表的维护命令
将逻辑值赋给内存变量X的正确方法是________。 A.X="T" B.STORE "T"TOX C.X=TURE D.STORE.T.TOX
计算表达式(10*5<30 OR .T. AND "X"-"Y"$"XYZ")时,其运算结果是 ________。 A..F. B..T. C.T D.F
第三章 查询与统计 主要介绍数据库系统中最见的两种 应用:查询与统计所需数据
§ 3.1 排序与索引 • 在用LIST命令列表记录时,通常按输入的先后顺序排列,但通常我们需要按照某种顺序排列出来,这就需要对这个表进行排序或索引。
3.1.1 排序 • 排序即根据某些字段重排记录,排序后将产生一个新表,原文件不变。 • 命令格式: SORT TO <表文件名> ON <字段名1> [/A | /D] [/C] [,<字段名2> [/A | /D] [/C] ...] [<范围>] [FOR <条件1>] [WHILE <条件2>] [FIELDS <字段名列表> | FIELDS LIKE <通配字段名> | FIELDS EXCEPT <通配字段名>]
SORT TO命令参数说明 • ON后字段名表示排序字段,A表升序,D表降序(默认按升序排序), C表不区分字母的大小写。不可选用备注和通用型字段来排序。 • 可在ON后用多字段名实现多重排序。 • 缺省范围和条件子句,即对所有记录排序。 • FIELDS子句指定新表包含的字段。
例3-1 P72 对SB.dbf分别按以下要求排序: (1)将非主要设备按启用日期降序排序,并要求新表只包含编号、名称、启用日期3个字段。 (2)将主要设备按部门降序排序,当部门相同时则按价格升序排序。
题解答案 (1)Use sb Sort to rqx on 启用日期/d fields 编号,名称,启用日期 for not 主要设备 Use rqx List (2)use sb Sort to bmx on 部门/d,价格/a for 主要设备 use bmx list
3.1.2 索引 一、索引的概念 • 记录的物理顺序与逻辑顺序 物理顺序指记录在磁盘上的存储顺序。执行排序后,新文件中形成了新的物理顺序。 索引则不改变原文件记录的物理顺序,是按某个索引关键字来建立记录的逻辑顺序。索引文件中,所有关键字值按顺序排列,每个值对应原文件的一个记录号,这样便确定了记录的逻辑顺序。
排序与索引区别 • 排序要生成一个新的表文件,记录的物理顺序发生了改变; • 排序生成的表可以单独使用。 • 索引文件只包含关键字和记录号两个字段,比被索引的表要小得多; • 索引起作用后,增删或修改表的记录时索引文件会自动更新。 • 索引并不生成新的表文件,仅仅是表中记录的逻辑顺序发生了变化,但索引也要生成一个新的文件,即索引文件。 • 索引文件不能单独使用,它必须同表一起配合使用。
二、索引的种类 1. 按扩展名分类 索引文件有二种:单索引文件(.IDX)和复合索引文件(.CDX,Compound Index ),而复合索引文件又可分为结构复合索引文件和非结构复合索引文件两种(P73)。 2. 按功能分类 VFP对结构复合索引文件提供了四种类型:主索引、候选索引、唯一索引和普通索引 。
四种索引的概念与区别 主索引(仅用于数据库表)是指关键字段或索引表达式中不允许出现重复值的索引,主要用于主表或被引用的表,用来在一个永久关系中建立参照完整性。对一个表而言,只能创建一个主索引。 候选索引是可以作主关键字的索引,因为它不包含Null值或重复值。在数据表和自由表中均可以为每个表建立多个候选索引。 唯一索引(为与以前版本兼容而设置)不允许有两个相同的索引值,这种要求与主索引相同。 普通索引可以用来对记录排序和搜索记录,允许关键字有重复值。一个表中可有多个普通索引。
三、建立索引 命令格式:INDEX ON <索引关键字> TAG <索引标识名> [FOR <条件>] [ASCENDING | DESCENDING] [CANDIDATE] 功能:建立结构复合索引文件及索引标识,或增加索引标识。
参数描述: (1)<索引关键字>: 用以指定记录重新排序的字段或表达式。它可以是字段名,也可以是含有当前表中字段的合法表达式。表达式值的数据类型可以是字符型、数值型、日期型、逻辑型。若表达式中包含几种类型的字段名,需要使用类型转换函数将其转换为相同类型。 TAG 子句的<索引标识名>为该索引定义一个标识。 (2)默认的索引类型为普通索引,选用CANDIDATE表示候选索引。 (3)记录逻辑顺序默认为升序。
P75例3-2 Use sb Index on 价格 tag jg descending List Index on 部门+str(价格,9,2) tag bmjg List Index on val(部门)-价格/1000000 tag bmjg1 candidate list
第一步:选择要建立索引的关键字段 第二步:在“索引”下拉列表框中选择“无”、“升序”、“降序”,建立索引 索引选项卡 第三步:单击【确定】按钮
利用表设计器的索引选项卡建立索引文件 索引选项卡 移动按钮 表达式生成按钮 排序按钮 在此列表框中选择索引类型 在此输入条件表达式 在此框中输入索引标记 在此文本框中输入索引表达式
四、索引的使用 一个复合索引文件中可能包含多个索引,但任何时候只有一个索引能起作用。当前起作用的索引称为主控索引。 在复合索引中,当前建立的索引将自动成为主控索引。也可用下面的命令指定主控索引: 命令格式:SET ORDER TO [<数值表达式>] | [[TAG] <索引标识> [ASCENDING | DESCENDING]]
参数描述: <数值表达式>表示索引建立的次序号,用于将该索引指定为主控索引。 <索引标识>也用于指定主控索引。 SET ORDER TO或 SET ORDER TO 0命令取消主控索引,表中记录将按物理顺序输出。
例3-3 Use sb Set order to jg List Set order to 3 List Set order to List Set order to 2 list
五、索引的更新 1、自动更新 当表中数据发生变化时,已打开的索引文件将随数据的改变自动改变记录的逻辑顺序,实现索引的自动更新。 2、重新索引 若未指定主控索引,修改表的记录时索引文件就不会自动更新。如果仍要维持记录的逻辑顺序,可用命令REINDEX重建索引;也可用INDEX ON命令再次建立索引。
六、 删除索引 命令格式: DELETE TAG ALL| <索引标识1> [, <索引标识2>]…. 功能:删除打开的结构复合索引文件的索引标识。 说明: ALL子句用于删除结构复合索引文件的所有索引标识。若某索引文件的所有索引标识都被删除,该索引文件也被删除。 例: Use sb Delete tag bmjg1
§ 3.2 查询命令 查询即指按照指定条件在表中查找所需记录。 分为顺序查询、索引查询、使用SELECT-SQL命令查询。
3.2.1 顺序查询命令 • 包括LOCATE和CONTINUE两条命令。 1、LOCATE命令 格式:LOCATE FOR <条件> [<范围>] [WHILE <条件>] 功能:按顺序搜索表,从而找到满足指定逻辑表达式的第一个记录。执行该命令后,可用RECNO( )函数来显示当前定位记录。
2、CONTINUE命令 • 功能:它使LOCATE命令从当前记录开始继续查找下一条满足条件的记录。 • 说明:CONTINUE是用在LOCATE之后继续查找满足同一条件的记录的命令,它继续LOCATE的操作。
P78例3-4 在SB.dbf中查询价格小于15000元的非主要设备。 Use sb Locate for 价格<15000 and not 主要设备 Display Continue ? Recno(),名称,价格,主要设备 continue
3.2.2 索引查询命令 • 用LOCATE命令查询的优点是不论表中的记录是否有序都能进行查找,而其主要的缺点是查找速度慢。当表中的记录较多,并且要查询的记录又在表的底部时,问题尤为突出。为了解决这一问题,VFP提供了二条快速查询命令:FIND和SEEK。FIND是为了兼容前版本而保留,可用SEEK代替。
SEEK命令 • 格式:SEEK <表达式> 功能:在打开的索引文件中快速查找与<表达式>相匹配的第1 条记录。若找到,记录指针指向该记录,并且将FOUND( )函数的值置为“真”;若没找到,则将记录指针指向表的末尾,且将FOUND()函数的值置为“假”,将EOF( )函数的值置为“真”。 参数描述: <表达式>:指定SEEK搜索的关键字。<表达式>可以是空字符串。
例3-5 SEEK命令示例 Use sb Index on 编号 tag bh Seek “038-1” ?recno() Index on 启用日期 tag qyrq Seek {3/5/90} ? Found() Index on 价格 tag jg Seek 1000.00 ? Recno(),found()
模糊查询与精确查询 对于字符表达式,系统允许模糊查询,即只要字符表达式值与索引关键字值左子串相同,就认为找到。 命令set exact on | off用来设置匹配环境,ON表示完全匹配,用于精确查询。OFF表示模糊查询,系统默认为OFF。
例3-6 模糊查询、精确查询示例 use sb Set order to tag bh Seek “03” ? Recno(),found() Set exact on Seek “03” ? Found() Set exact off
§ 3.2.3 工作区和数据工作期 1、工作区 (1)工作区号 打开表即是将它从磁盘调入内存的某一工作区。 VFP提供了32767个工作区,编号从1到32767。每个工作区只允许打开一个表。 别名:前10个工作区除使用1-10为编号外,还可依次用A-J十个字母表示,即别名。其实表也有别名。
2、select 命令 命令格式:select <工作区号> | <别名> 功能:选定某个工作区,用于打开一个表。 说明: (1)Select命令选定的工作区为当前工作区,VFP默认1号工作区为当前工作区,函数select( )返回当前工作区号。引用非当前工作区表的字段必须冠以别名。
例: Close all ?select() Use bmdm Go 3 ?名称 Select 2 Use sb Go 4 ?名称,bmdm.名称
(2)Select 0表示选定当前尚未使用的最小号工作区。要切换到某工作区,只要在select命令中使用表的别名即可。 注意:只有已打开的表方可在select命令中使用其别名。 (3)命令“use <表名>in <工作区号>|<别名>”能在指定的工作区打开表,但不改变当前工作区,要改变工作区仍需使用select命令
例3-7: Close all Select 0 Use sb Go 3 Select 0 Use bmdm Index on 代码 tag dm Seek sb.部门 ?sb.编号,a.部门,名称 Select sb ? 编号,名称,bmdm.名称
2、数据工作期 Visual FoxPro 提供了一种称为数据工作期的窗口,用于打开或显示表、建立表间关系、设置工作区属性。这种环境还可以保存为视图文件,以后需要同样环境时,只需直接打开这一文件即可。
(2)数据工作环境的保存与恢复 ①数据工作环境保存到视图文件 数据工作期设置的环境可以作为视图文件保存,以便在需要时恢复它所保存的环境。 1. 菜单操作 在数据工作期窗口未关闭时,可用“另存为”菜单命令注意:必须事先关闭“浏览”窗口 2. 命令操作 若未打开数据工作期窗口,可通过如下命令保存当前数据工作环境: Create view <视图文件名>
②从视图文件恢复数据工作环境 使用“文件”菜单的“打开”命令 命令:set view to <视图文件名>
作业: P119 习题1、3、4