540 likes | 790 Views
Visual FoxPro 应用基础与面向对 象程序设计教程. 潘世永 数学与计算机学院 Email: psycg5753@163.com. 第三章 查询与统计. 排序与索引.
E N D
VisualFoxPro 应用基础与面向对 象程序设计教程 潘世永 数学与计算机学院 Email: psycg5753@163.com
第三章 查询与统计 排序与索引 为了高效方便地存取数据,往往要求表记录以一定的顺序排放或显示,因此,Visual FoxPro提供了两种方法重新组织数据,即排序和索引。表的排序排序是从物理上对表进行重新整理,按照指定的关键字段来重新排列表中数据记录的顺序,并产生一个新的表文件。【命令格式】SORT TO <新文件名> ON <字段1> [/A | /D] [/C] [, <字段2> [/A | /D] [/C] ...] [<范围>] [FOR <逻辑表达式1>] [WHILE <逻辑表达式2>][FIELDS <字段名表>]【功能】对当前打开的表,按指定的字段进行排序,生成新的表文件。
说明: (1)ON <字段名1>:在当前选定的、要排序的表中指定关键字段,它决定了记录在新表中的顺序。 (2)[/A | /D] [/C]:指定排序顺序(升序或降序)。/A指定为按升序排序,/D指定按降序排序。如果在字符型字段名后面包含/C,则忽略大小写。默认为升序。(3)当有多个关键字段时,先按字段1的值排列,其值相同的,再按字段2的值排列,…… (4)该命令执行后,当前表不变,产生的新表不会自动打开。 【例】将STUD.DBF按成绩进行降序排列USE STUD SORT TO STUD2 ON 成绩/D
表的索引一般情况下,表中记录的顺序是由数据输入的前后顺序决定的,并用记录号予以标识。除非有记录插入或者有记录删除,否则表中的记录顺序总是不变的。 当用户有不同需求时,为了加快数据的检索速度,需要对文件中的记录顺序重新组织,而索引技术则是最为可行的办法。 索引实际上是一种排序,但是它不改变数据表中数据的物理顺序,而是建立一个索引表达式值与该值在表中所对应的记录号的对应关系,产生一个相应的索引文件,其名字与表同名,但扩展名不同。一旦表和相关的索引文件被打开,则对表操作时,记录的顺序按索引表达式的值的逻辑顺序显示和操作。 在Visual FoxPro系统中,可以为一个表建立多个索引,每一个索引确定了一种表记录的逻辑顺序。
索引文件类型Visual FoxPro系统中支持单索引文件和复合索引文件。单索引文件是根据一个索引关键字表达式建立的索引文件,文件扩展名为.IDX。复合索引文件是指索引文件中可以包含多个索引,每一个索引均有一个特殊的标识名(TAG)。复合索引文件扩展名为.CDX。每个索引标识与单索引文件类似,也可以根据一个索引关键字表达式建立。 复合索引文件又有两种:一种是结构复合索引文件;另一种是非结构复合索引文件。 结构复合索引文件是由系统自动命名的,与相应的表文件同名。该索引文件随表文件同时打开和同时关闭。非结构复合索引文件不与表文件同名,由命令指定打开。 一个表文件可建立多个索引文件,也可同时打开多个索引文件,但在同一时间内只有一个索引起作用,这个索引称为主控索引。
索引类型Visual FoxPro系统提供了四种不同的索引类型,它们分别是:主索引、候选索引、普通索引和唯一索引。1.主索引 在数据库中的数据表可以建立主索引(Primary Index)。索引表达式的值是唯一能够标识每个记录处理顺序的值。每一个表只能建立一个主索引,只有数据库表才能建立主索引。2.候选索引 有的情况下,在数据表中有多个字段值都能够唯一确定记录的顺序,但表中已有主索引,则它们可以建立候选索引(Candidate Index) 。一个数据表可以建立多个候选索引。数据库表和自由表都可以建立侯选索引。
3.普通索引普通索引(Regular Index)可以用来对记录排序和搜索记录,它不强迫记录中的数据具有唯一性。允许多个记录的索引表达式值相同,可以重复存储。数据库表和自由表都可以建立普通索引。 4.唯一索引 唯一索引(Unique Index)也允许多个记录的索引表达式值相同,但如果记录的索引表达式值相同,则只存储第一个索引表达式值。数据库表和自由表都可以建立唯一索引。 注意:主索引和侯选索引只能存储在结构复合索引文件中,因为主索引和侯选索引都必须与表文件同时打开和同时关闭。
索引的建立命令方式【格式】INDEX ON <索引关键字表达式> TO <单索引文件> | TAG <标识名>[OF <非结构复合索引文件名>] [FOR <逻辑表达式>] [ASCENDING | DESCENDING][UNIQUE|CANDIDATE] [ADDITIVE]说明:新建的索引文件自动打开,并开始起作用。<索引关键字表达式>:指定建立索引文件的关键字表达式,可以是单一字段名,也可以是多个字段组成的表达式。当表达式是单个字段名时,字段类型不用转换;若在表达式中包含有几种类型的字段名,常常需要使用类型转换函数将其转换为相同类型的数据。 TAG <标识名>:此选项只对建立复合索引文件时有效,指定建立或追加索引标识的标识名。ADDITIVE:表示保留以前打开的索引文件。否则,除结构复合索引文件外,以前打开的其他索引文件都将被关闭。
【例】对STUD.DBF表文件建立出生日期单索引文件。USE STUDINDEX ON 出生日期TO STUD【例】对表文件STUD.DBF,建立一个基于出生日期字段的结构复合索引文件。USE STUDINDEX ON 出生日期TAG 出生日期DESCENDING【例】在表文件STUD.DBF的结构复合索引文件中,按学号追加一个标识。USE STUD INDEX ON 学号TAG 学号【例】在表文件STUD.DBF的结构复合索引文件中,先按性别再按学号追加一个标识。USE STUD INDEX ON 性别+学号TAG 性别学号
菜单方式① 打开表文件。② 选择【显示】|【表设计器】命令,打开表设计器对话框,选择“索引”标签。 移动按钮 表达式生成按钮 排序按钮 在此列表框中选择索引类型 在此输入条件表达式 在此框中输入索引标识 在此文本框中输入索引表达式 注意:用表设计器建立的索引都是结构复合索引文件。
索引文件的打开【格式1】USE <文件名> INDEX <索引文件名表> [ORDER <数值表达式> | <单索引文件> | [TAG] <标识名>] 【功能】打开指定的表文件及相关的索引文件。 说明:(1)INDEX <索引文件名表> :指定要打开的索引文件;索引文件中的文件扩展名可以省略,但如果存在同名的单索引文件和复合索引文件,必须带扩展名。(2)<索引文件名表>中的单索引文件和复合索引文件的标识有一个唯一的编号,编号最小值为1,编号规则为:先将单索引文件按它们在<索引文件名表>中的顺序编号,再将结构复合索引文件按标识产生的顺序连续编号。(3)[ORDER]子句:指定主控索引。(4)<数值表达式>:指定主控索引的编号,若<数值表达式>的值为0,表示不设主控索引,则表文件的记录将以物理顺序被访问。
【格式2】SET INDEX TO [<索引文件名表> ] [ORDER <数值表达式> | <单索引文件名> | [TAG] <标识名>][ADDITIVE]【功能】在已打开表文件的前提下,打开相关索引文件。说明:ADDITIVE:保留以前打开的索引文件。否则,除结构复合索引文件外,以前打开的其他索引文件都将被关闭。 索引文件的关闭 【格式1】USE【功能】关闭当前工作区中打开的表文件及所有索引文件。【格式2】SET INDEX TO【格式3】CLOSE INDEX【功能】关闭当前工作区中打开的所有单索引文件和非结构复合索引文件。注意:结构复合索引文件不能用以上命令关闭,它随表文件的打开而打开,随表文件的关闭而关闭。
设置主控索引 如果在打开索引文件时未指定主控索引,打开索引文件之后需要指定主控索引,或者希望改变主控索引,可使用下面的命令。【格式】SET ORDER TO [<数值表达式> | <单索引文件名> | [TAG] <标识名>]【功能】指定打开的索引文件中的主控索引。说明:(1)<数值表达式>的值为指定主控索引的编号。(2)如果<数值表达式>的值为0或缺省,则使所有打开的索引文件都无效。
索引的删除 (1)单索引文件的删除【格式】DELETE FILE <单索引文件名>【功能】删除指定的单索引文件。 说明:关闭的单索引文件才能被删除,文件名必须带扩展名。(2)索引标识的删除【格式】DELETE TAG <标识名1> [, <标识名2>] ... 或:DELETE TAG ALL【功能】从打开的结构复合索引文件中删除索引标识。【例】删除表文件STUD.DBF的单索引文件STUD.IDX及结构复合索引文件中的所有标识。DELETE FILE STUD.IDX USE STUD DELETE TAG ALL
索引文件的更新 当表中的记录被修改时,系统会自动地更新打开的索引文件。对于没有打开的索引文件,索引不能自动更新。为避免使用旧的索引文件导致错误,应该使用重新索引命令更新已经建立的索引文件。(1)命令方式【格式】REINDEX【功能】重新建立已索引过的索引文件。【例】将表STUD.DBF的索引文件重新索引。USE STUD SET INDEX TO STUD.IDX REINDEX(2)菜单方式① 打开表文件。② 选择【显示】|【浏览】命令。 ③ 选择【表】|【重新建立索引】命令,系统自动重新建立索引。
排序与索引的区别 1、排序要生成一个新的表文件,记录的物理顺序发生了改变; 2、排序生成的表可以单独使用。 3、索引并不生成新的表文件,仅仅是表中记录的逻辑顺序发生了变化,但索引也要生成一个新的文件,即索引文件。 4、索引文件不能单独使用,它必须同表一起配合使用。
查询 对表记录的查询,系统提供了两类查询命令:顺序查询和索引查询。 顺序查询顺序查询也叫直接查询,是按照记录的物理顺序逐个比较,逐个查询。1.命令方式【格式】LOCATE FOR <条件> [<范围>] [WHILE <条件>] 【功能】按顺序搜索表,从而找到满足指定逻辑表达式的第一个记录。 [<范围>]:指定要定位的记录范围。只有在范围内的记录才被定位。LOCATE命令的默认范围是ALL。
说明: (1)被搜索的表不必有索引。 (2)若LOCATE发现一个满足条件的记录,就将记录指针定位在该记录上。可以使用RECNO( )返回该记录的记录号,同时FOUND( )函数返回“真”,EOF( )函数返回“假”。如果没有找到,则将记录指针指向范围的最后一个记录,同时FOUND( )函数值为“假”,屏幕上显示“已到定位范围末尾”。 (3)该命令只能查找第一条满足条件的记录。 (4)若表中有多条满足条件的记录,当已经找到一条满足条件的记录后,还想继续查找后面满足条件的记录时,可以使用CONTINUE 命令继续向后查找满足条件的记录。(5)CONTINUE命令必须在LOCATE命令之后使用,否则出错。在CONTINUE命令中实际隐含了前一个LOCATE命令中的条件。
2.菜单方式 ① 首先打开表文件 ② 选择【显示】|【浏览】命令。 ③ 选择【表】|【转到记录】|【定位】命令,出现定位记录对话框。 ④ 在“作用范围”下拉列表框中选择查询范围,在FOR或WHILE框中输入查询条件,选择定位按钮。系统将指针定位于符合条件的第一条记录上。
索引查询(FIND、SEEK)LOCATE命令无论索引文件是否打开都可使用。而其主要的缺点是查找速度慢。在打开索引文件后,还可以用FIND、SEEK命令进行快速查询。1.FIND命令索引查询(FIND、SEEK)LOCATE命令无论索引文件是否打开都可使用。而其主要的缺点是查找速度慢。在打开索引文件后,还可以用FIND、SEEK命令进行快速查询。1.FIND命令 【格式】FIND <字符串>/<数值常量> 【功能】在表文件的主控索引中查找关键字值与<字符串>或<数值常量>相匹配的第一个记录。说明:(1)必须打开相应的表文件、主控索引文件。 (2)查询字符串,字符串可以不用定界符括起来,但前后有空格的,则必须要括进来。如果用SET EXACT ON命令,则匹配必须是精确的。 【例】打开表文件STUD.DBF,查找姓“赵”的记录。 USE STUD SET ORDER TO 姓名 FIND 赵
2.SEEK命令【格式】SEEK <表达式>【功能】在表文件的主控索引中查找关键字值与<表达式>值相匹配的第一个记录。 说明:(1)SEEK命令中的表达式的类型必须与索引表达式的类型相同。(2)表达式为字符串时,必须用定界符括起来。日期常量也必须用大括号括起来。(3)计算机先计算表达式的值,然后用其值进行查询。如果用SET EXACT ON命令,则匹配必须是精确的。【例】用SEEK命令在STUD.DBF中查找记录。USE STUD SET ORDER TO 姓名SEEK “孙”
数据统计与计算 统计记录数 【格式】COUNT [<范围>] [FOR <逻辑表达式1>] [WHILE <逻辑表达式2>] [TO <内存变量>] 【功能】用于统计当前表中指定范围内满足条件的记录个数。说明:(1)默认的范围是ALL。除非指定了<范围>或 FOR/WHILE <条件>,否则将计算所有记录个数 (2)如选择了 TO <内存变量>,则可将计算结果保存在<内存变量>中,否则统计结果只在状态条上显示。【例】统计STUD.DBF中的男同学记录个数和表记录总数。 USE STUD COUNT FOR 性别="男" TO A COUNT TO B
求和 【格式】SUM [<数值表达式表>] [<范围>] [FOR <条件>] [WHILE <条件>] [TO <内存变量表> | TO ARRAY <数组>] 【功能】对指定范围内、满足条件的记录按指定的各个数值表达式分别求和。说明:(1)缺省范围、条件表示全部记录。(2)缺省数值表达式表,表示对表中所有数值型字段求和。【例】对GZGL.DBF中的基本工资、岗位工资、奖金和工资总额求和,并将结果存贮到数组A中。USE GZGL SUM TO ARRAY A
求平均值 【格式】AVERAGE [<数值表达式表>] [<范围>] [FOR <逻辑表达式1>] [WHILE <逻辑表达式2>] [TO <内存变量表> | TO ARRAY <数组>]【功能】对当前表文件中指定范围内满足条件的记录,按指定的数值表达式计算平均值。说明:(1)缺省范围、条件表示全部记录。(2)缺省数值表达式表,表示对当前库中所有数值型字段求平均值。【例】分别计算GZGL.DBF中的男女各项收入的平均值。 USE GZGL AVER FOR 性别=”男”TO ARRAY B AVER FOR 性别=”女”TO ARRAY C
综合计算 【格式】CALCULATE <表达式表> [<范围>] [FOR <逻辑表达式1>] [WHILE <逻辑表达式2>] [TO <内存变量表> | TO ARRAY <数组>]【功能】对当前表文件中指定范围内满足条件的记录进行指定的计算工作。注意:表达式中至少须包含系统规定的8个函数之一。【例】计算GZGL.DBF中的人数、奖金收入的平均值和最大值、工资总额的平均值、最大值。USE STUD CALC CNT(),AVG(奖金),MAX(奖金),AVG(工资总额),MAX(工资总额) TO X1,X2,X3,X4,X5
分类汇总 【格式】TOTAL TO <汇总文件名> ON <关键字段> [FIELDS <数值型字段名表>] [<范围>] [FOR <逻辑表达式1>] [WHILE <逻辑表达式2>] 【功能】按关键字段对当前表文件的数值型字段进行分类汇总,形成一个新的表文件。 说明:(1)当前表必须在关键字上排序或索引,否则仅将关键字段值相同的紧挨的记录值汇总。(2)汇总命令执行后,将生成一个新的表文件,结构与当前表的结构完全相同,对非数值型字段,则把关键字相同的连续记录的第一条记录的字段内容送入新表。(3)缺省待汇总字段名表,则将所有数值型字段的值进行汇总。
多表的操作 每个工作区最多只能打开一个表文件,用USE命令打开一个新的表,同时也就关闭了前面已打开的表。在实际应用中,用户常常需要同时打开多个表文件,以便对多个表文件的数据进行操作。为了解决这一问题,Visual FoxPro引入了工作区的概念。 工作区与多个表 工作区和当前工作区 Visual FoxPro 能同时提供32767个工作区。系统默认值为1区。每个工作区都有一个工作区号,分别用1~32767表示,其工作区1~10还分别对应有别名A~J。 在任意时刻,只有一个工作区是当前工作区。 同一个表文件不允许同时在多个工作区打开。
工作区号与别名 【命令格式】 USE <表文件名> [IN <工作区号>/<别名>] 【功能】在指定的工作区打开指定的表文件,并为该表文件起一个别名。 说明:[IN <工作区号>/<别名>]:指定要选择的工作区。如果省略该选择项,则为当前工作区。别名可以是工作区的别名,也可以是表的别名。
工作区的选择 当系统启动时,1号工作区是当前工作区,若想改变当前工作区,则可使用SELECT命令来转换当前工作区。【命令格式】SELECT<工作区号>/<别名>【功能】选择一个工作区作为当前工作区。 说明:别名甚至可以用已打开的表名替代工作区别名。此命令允许选用“0”号工作区。如果指定“0”,则表示选用当前未使用过的编号最小的工作区作为当前工作区。 执行该命令后,对任何工作区中的表及记录指针均不发生影响,仅实现各个工作区之间切换。
【例】在1号和2号工作区内分别打开STUD.DBF和COURSE.DBF表文件,并选择1号工作区为当前工作区。 SELECT 1 USE STUD SELECT 2 USE COURSE SELECT 1 非当前工作区字段的引用 对非当前工作区的其他工作区中的表文件的数据进行访问。可通过以下两种格式访问其他工作区表中的数据。 格式:<工作区别名>-> <字段名> <工作区别名>. <字段名>
使用USE命令关闭打开的表文件 格式:USE IN <工作区号>/<别名> 功能:关闭指定工作区中的表文件。 使用如下命令关闭打开的表文件 格式1:CLEAR ALL 格式2:CLOSE ALL 格式3:CLOSE DATABASE 格式3:CLOSE TABLES
表的关联 1.关联的概述 如果在多个工作区同时打开多个表文件,在当前工作区中移动表的记录指针时,其它表的记录指针不会随之移动 。如果要想其它表的记录指针也随之移动,则要建立表间的关联。 用来建立关联的表称为父表,被关联的表称为子表。 在两个表之间建立关联,必须以某一个字段为标准,该字段称为关键字段。
2.表文件关联的建立 多对一关联的建立 父表有多条记录对应子表中一条记录的情况 1)命令方式 【格式】SET RELATION TO [<关键字段表达式> ] [INTO<别名>|<工作区号>] [ADDITIVE] 【功能】将当前工作区的表文件与<别名>(或工作区号)指定的工作区中的表文件按<关键字段表达式>建立关联。 说明:(1)关键字段必须是两个表文件共有字段,且别名表文件已按关键字段建立了索引文件,并已指定关键字段为主控索引。 (2)当父表文件的记录指针移动时,子表文件的记录指针指向关键字段值与父表文件相同的记录。如果子表中没有与关键字段值相同的记录,记录指针指向文件尾,EOF()为.T.。
(3)ADDITIVE:表示当前表与其他工作区表己有的关联仍有效,实现一个表和多个表之间的关联;否则取消当前表与其他工作区表已有的关联。(4)SET RELATION TO:则表示取消当前工作区与其他工作区的关联。【例】 将表文件STUD.DBF和SC.DBF以学号为关键字段建立关联。SELECT 2USE SCINDEX ON 学号TAG 学号SELECT 1 USE STUDSET RELATION TO 学号 INTO 2
2)菜单方式① 选择【窗口】|【数据工作期】,弹出数据工作期窗口。② 选择【打开】,将需要用到的表在不同的工作区打开。③ 在别名列表中选择主表,再单击“关系”按钮,再在别名列表中选择子表。④ 如果子表文件未指定主索引,系统会打开 “设置索引顺序”对话框,以指定子表文件的主索引。⑤ 主索引建立后,系统弹出 “表达式生成器” 对话框,在字段列表框中选择关联关键字段,然后单击“确定”按钮,返回数据工作期窗口。 ⑥ 此时在数据工作期窗口的右侧列表框中出现了子表,在父表和子表之间有一单线相连,说明在两表之间已建立了多对一关联。
一对多关联的建立 父表的一条记录对应子表中多条记录的情况1)命令方式【格式】SET SKIP TO [<别名1>[, <别名2>] ...]【功能】将当前表文件与其他工作区中的表文件建立一对多关联。说明:(1)先要建立多对一的关联,然后才能将多对一的关联进一步定义成一对多的关联。(2)当前工作区表记录指针移动时,子表文件的记录指针指向第一个与关键字表达式值相匹配的记录,若找不到相匹配的记录,则记录指针指向文件尾部。(3)当父表中的一个记录与子表的多个记录匹配时,在父表中使用SKIP命令,并不使父表的指针移动,而子表的指针却向前移动,指向下一个与父表相匹配的记录;重复使用SKIP命令,直至在子表中没有与父表当前记录相匹配的记录后,父表的指针才真正向前发生移动。(4)无任何选择项的SET SKIP TO命令将取消一对多的关联(一对一的关联仍然存在)。
2)菜单方式① 选择【窗口】|【数据工作期】,弹出的数据工作期窗口。② 按前面所述的步骤,建立多对一关联。③单击【一对多】按钮,系统弹出创建一对多关系对话框。④ 在创建一对多关系对话框的子表别名列表框选择子表别名,单击“移动”按钮,子表别名将出现在选定别名列表框中,单击“确定”按钮,完成子表别名的指定,并返回到数据工作期窗口。⑤ 完成上述工作后,在数据工作期窗口的右侧列表框中出现了子表文件名,在父表和子表之间有一双线相连,说明在两表之间已建立了一对多关联 。
一个表对多个表关联的建立1)命令方式【格式】SET RELATION TO [<关联表达式1> INTO <别名1> | <工作区1>[, <关联表达式2> INTO <别名2> | <工作区2> ...][ADDITIVE]]【功能】将当前工作区中的表与多个其他工作区中的表建立关联。2)菜单方式只要每次选择的子表不同,就可以分别建立一个表文件同多个表文件的关联。
3.取消表的关联格式1:SET RELATION TO功能:取消当前工作区表与其它工作区表建立的关联。格式2:SET RELSTION OFF INTO <工作区号>|<别名> 功能:删除当前工作区与由<工作区号>|<别名>指定的工作区中表建立的关联。该命令必须在父表所在的工作区执行。当用USE关闭某些表时,系统将自动删除掉与它建立的关联。
表的连接 格式:JOIN WITH <别名> TO <表文件名> FOR <条件> [FIELDS <字段名表>]功能:连接当前工作区中打开的表和<别名>指定的工作区的表,生成<表文件名>规定的新的表文件。
数据库 创建数据库把有关系的表存放在同一个数据库中,确定它们的关联关系,数据库中的数据才能被更充分地利用。1.数据库的建立CREAT DATABASE命令 2.打开数据库 OPEN DATABASE命令 3.修改数据库MODIFY DATABASE命令 有了数据库文件,就可以向数据库添加表了。通常一张表只能属于一个数据库文件,如果你想向当前数据库中添加的表已被添加到了别的数据库中,在加入你所建立的数据库之前,必须要从其它数据库中移去后才能添加到你的数据库中。
数据库环境下表设计器的新特性设置记录规则:1. 设置表中字段的显示标题2.设置表中字段的注释3.设置表中字段的默认值4.设置表中字段有效规则设置记录规则:1.记录验证2.触发器建立表间的永久关系建立数据库文件中表间关联,一是要保障建立关系的表具有相同的字段;二是每个表都要以该字段建立索引(一个表为主索引或候选索引,另一个表为任意类型索引)。在这一前提下,以其中一个表中的字段与另一表中的同名字段建立关联,两个表间就具有了一定的关系。
设置参照完整性在数据库中的表建立关联关系后,可以在“参照完整性生成器”窗口,设置关联记录的插入、删除或修改规则,有三个选项卡供用户选择。其中:“更新规则”选项卡:可以利用三个选择按钮,设置关联表间的更新规则。三个选择按钮的功能如下:级联:用新的关键字值更新子表中的所有相关记录;限制:若子表中有相关记录则禁止更新;忽略:允许更新,不管子表中的相关记录。“删除规则”选项卡:可以利用三个选择按钮,设置关联表间的删除规则。三个选择按钮的功能如下:级联:删除子表中的所有相关记录;限制:若子表中有相关记录,则禁止删除;忽略:允许删除,不管子表中的相关记录。“插入规则”选项卡“:可以利用二个选择按钮,设置关联表间的插入规则。二个选择按钮的功能如下:限制:若父表中没有匹配的关键字值,则禁止插入;忽略:允许插入。设置参照完整性在数据库中的表建立关联关系后,可以在“参照完整性生成器”窗口,设置关联记录的插入、删除或修改规则,有三个选项卡供用户选择。其中:“更新规则”选项卡:可以利用三个选择按钮,设置关联表间的更新规则。三个选择按钮的功能如下:级联:用新的关键字值更新子表中的所有相关记录;限制:若子表中有相关记录则禁止更新;忽略:允许更新,不管子表中的相关记录。“删除规则”选项卡:可以利用三个选择按钮,设置关联表间的删除规则。三个选择按钮的功能如下:级联:删除子表中的所有相关记录;限制:若子表中有相关记录,则禁止删除;忽略:允许删除,不管子表中的相关记录。“插入规则”选项卡“:可以利用二个选择按钮,设置关联表间的插入规则。二个选择按钮的功能如下:限制:若父表中没有匹配的关键字值,则禁止插入;忽略:允许插入。
视图 视图是从已有的数据库表或视图中导出的“表”。它与数据表不同的是,视图中只存放相应的数据逻辑关系,并不保存表的记录内容,因此可以把它看作是一个“虚表”。视图是不能单独存在的,它依赖于某一数据库,只有打开与视图相关的数据库才能创建和使用视图。但可以在视图中改变记录的值,然后将更新记录返回到源表。 利用视图向导创建视图(P125) 利用视图设计器可以创建本地视图 利用视图设计器创建视图(P131) 利用视图向导可以创建单表视图和一对多视图 利用视图更新数据(P136) 虽然视图是一个“虚表”,但是也可以利用视图更新数据表中的数据。因为视图可以限定数据表中数据的使用范围,因此,也就限定了可更新的数据,数据表中其他的数据就不会被破坏,由此可以提高数据维护的安全性。
查询 查询的创建1.利用“查询向导”创建查询2.利用“查询设计器”创建查询 命令:CREATE QUERYMODIFY QUERY 查询的运行与修改 1.查询的运行方法1:在“查询设计器”窗口中,选择【查询】|【运行查询】命令。方法2:在“查询设计器”窗口中,右击“查询设计器”窗口,选择快捷菜单中的【运行查询】命令。方法3:在“命令”窗口中,键入 DO <查询文件名> 。例如:DO CX1.QPR
2.查询的修改方法1: 选择【文件】|【打开】命令,在“打开”对话框中,选择所要修改的查询文件,单击“确定”按钮,进入“查询设计器”窗口中修改。方法2:在命令窗口中,键入 MODIFY QUERY <查询文件名>。3.查询去向的设置单击“查询设计器”工具栏中的“查询去向”按钮或在系统菜单中单击【查询】|【查询去向】命令,弹出“查询去向”对话框。其中共包含7个查询去向:浏览,临时表,表格,图形,屏幕,报表,标签。
视图与查询在功能上有许多相似之处,但又有各自特点,主要区别如下:功能不同:视图可以更新字段内容并返回源表,而查询文件中的记录数据不能被修改。从属不同:视图不是一个独立的文件而从属于某一个数据库。查询是一个独立的文件,它不从属于某一个数据库视图与查询在功能上有许多相似之处,但又有各自特点,主要区别如下:功能不同:视图可以更新字段内容并返回源表,而查询文件中的记录数据不能被修改。从属不同:视图不是一个独立的文件而从属于某一个数据库。查询是一个独立的文件,它不从属于某一个数据库 访问范围不同:由于数据库中数据的来源不同,视图可以分为本地视图和远程视图,可以访问本地数据源和远程数据源,而查询只能访问本地数据源。输出去向不同:视图只能输出到表的浏览窗口中,而查询可以选择多种去向。 视图和查询相比,视图虽然比查询多了一个更新功能,但是查询的输出格式的多样化又是视图所不及的,使用查询很重要的是如何确定查询结果的输出格式。
小 结 1、查询和视图是VFP6的重要组成部分,是非常相似的一种查询数据库中数据的方法。 2、查询是以磁盘文件形式存放的程序,其扩展名为.QPR,它通过DO命令来执行。 3、视图是一种定制的虚拟表,是依附于基表上的寄生表。 4、建立查询分为单表查询、多表查询和交叉表查询三种。 5、可以通过菜单、命令、项目管理器建立查询,通过菜单还可以使用查询向导,但查询向导的功能有限。 6、视图分为本地视图和远程视图二种。 7、建立本地视图的方法与建立查询的方法相似。 8、建立远程视图需要有远程连接。 9、可以通过视图更新源表中的数据,这是视图与查询的本质区别。 10、查询和视图都可以通过SQL-SELECT语句实现,查询和视图的SQL语句可以通过显示SQL窗口按钮查看。
【例】按出生日期降序显示STUD表中的学号,姓名,出生日期。【例】按出生日期降序显示STUD表中的学号,姓名,出生日期。 SELECT 学号,姓名,出生日期; FROM STUD ; ORDER BY 出生日期DESC 【例】按成绩升序显示SC表中的学号,课程号,成绩。 SELECT 学号,课程号,成绩; FROM SC ; ORDER BY 成绩
【例】按班级分类显示学生的姓名,课程名,成绩,同一班级按分数排序。【例】按班级分类显示学生的姓名,课程名,成绩,同一班级按分数排序。 SELECT a.姓名,a.班级名,c.课程名,b.成绩; FROM STUD a,SC b,COURSE c ; WHERE a.学号=b.学号AND b.课程号=c.课程号; ORDER BY a.班级名,b.成绩; 【例】显示成绩在80至90之间的学号,姓名,课程名和成绩。 SELECT a.姓名,c.课程名,b.成绩 FROM STUD a,SC b,COURSE c WHERE a.学号=b.学号AND b.课程号=c.课程号AND b.成绩BETWEEN 80 AND 90