查询统计和多表操作_第1页
查询统计和多表操作_第2页
查询统计和多表操作_第3页
查询统计和多表操作_第4页
查询统计和多表操作_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.1 第五章第五章 查询、统计与多表操作查询、统计与多表操作VFP程序设计培训.2第五章第五章 查询、统计和多表操作查询、统计和多表操作 =大纲要求:大纲要求:1、排序与索引、排序与索引2、查询、查询 1)顺序查询)顺序查询 LOCATE CONTINUE ; 2)索引查询)索引查询 FIND,SEEKSKIP ;3、多工作区操作、多工作区操作 1)工作区的选择)工作区的选择 2)表与表之间的连接与关联)表与表之间的连接与关联.35.1 排序排序 1、排序的概念、排序的概念 把当前数据表中的数据记录按某种顺序重新排列构成把当前数据表中的数据记录按某种顺序重新排列构成一个新数据表文件一个新数据表

2、文件,新表内容可以与源表完全相同,也新表内容可以与源表完全相同,也可以只取源表的一部分内容,但新表不改变源表内容可以只取源表的一部分内容,但新表不改变源表内容和记录顺序。和记录顺序。 要首先打开当前表;要首先打开当前表; 要生成新文件;要生成新文件; 新文件要用新文件要用USE命令打开才能使用。命令打开才能使用。.45.1 排序排序 2、排序命令、排序命令 sort to on /A /D/C , /A /D for / while fields 排序排序 到到 新文件新文件 按按 字段字段1 /升序升序 /降序,字段降序,字段2 /升序升序 /降序降序 排序范围排序范围 选择条件选择条件 排

3、序字段排序字段 .55.1 排序排序 3、命令说明、命令说明 1) 排序字段,只能为排序字段,只能为C、N、D三种类型,排序三种类型,排序 依据:依据: C型:英文按字母顺序、汉字按拼音顺序。型:英文按字母顺序、汉字按拼音顺序。 N型:型: 按大小;按大小; D型:型: 按日期的新老(新按日期的新老(新 老)老) 2)/A升序,升序,/D降序,缺省降序,缺省升序升序,/C不区分大小写不区分大小写 3)先按字段名)先按字段名1(关键字(关键字1)排序)排序,对关键字对关键字1相同的,再按字相同的,再按字 段名段名2(关键字(关键字2)排序,以此类推。)排序,以此类推。示例:示例: 学生表,按性别

4、,性别相同按入校总分排序。学生表,按性别,性别相同按入校总分排序。 SORT TO 新表新表 ON 性别,入校总分性别,入校总分 .65.2 索引索引 1、索引概念、索引概念加速查找加速查找 建立一个小得多的索引文件,在索引文件里建立一个小得多的索引文件,在索引文件里,给出由低给出由低到高(或由高到低)排列的关键字值及其相应的记录号。到高(或由高到低)排列的关键字值及其相应的记录号。下例为按出生日期建立的索引文件。下例为按出生日期建立的索引文件。 职工号 姓名 性别 出生日期10026 李小明 男 12/25/6210029 李新 男 10/05/6310026 刘明明 女 05/13/401

5、0026 张继业 男 11/11/5010026 孙志 男 05/30/63 记录号 1 2 3 4 5 出生日期 记录号05/13/40 311/11/50 412/25/62 105/30/63 510/05/63 2表文件索引文件.75.2 索引索引2、索引分类、索引分类单索引单索引-文件的扩展名为文件的扩展名为.idx 为与原为与原FOXBASE兼容而保留,只能对一个索引表达式兼容而保留,只能对一个索引表达式建立索引,目前已很少使用。建立索引,目前已很少使用。 复合索引复合索引-文件的扩展名为文件的扩展名为.cdx 当前主要使用的索引方式,在一个文件中,可以建立针当前主要使用的索引方式

6、,在一个文件中,可以建立针对多个索引表达式的多个索引,每个索引通过索引标识对多个索引表达式的多个索引,每个索引通过索引标识来区别。来区别。 结构复合索引与表文件同名,当打开表时自动打开。分结构复合索引与表文件同名,当打开表时自动打开。分为:为:主索引、侯选索引、普通索引、唯一索引主索引、侯选索引、普通索引、唯一索引.85.2 索引索引3、索引关键字和索引类型、索引关键字和索引类型 索引关键字:索引关键字:建立索引时使用的字段或字段组合。建立索引时使用的字段或字段组合。索引类型索引类型1)主索引主索引:数据库表数据库表中设定有主关键字的索引,要求字中设定有主关键字的索引,要求字段具有唯一值。段具

7、有唯一值。自由表没有主索引自由表没有主索引。2)侯选索引侯选索引:同样要求唯一值。同样要求唯一值。数据库表、自由表数据库表、自由表都可都可有多个候选索引。有多个候选索引。3)普通索引普通索引:允许多值。允许多值。任意表任意表可有多个普通索引。可有多个普通索引。4)唯一索引唯一索引:允许多值,但索引表中允许多值,但索引表中 只记录相同关键字记录的第一个。只记录相同关键字记录的第一个。.95.2 索引索引 4、索引的建立、索引的建立1)菜单方式:)菜单方式: 首先,打开表;首先,打开表; “显示显示”菜单菜单“表设计器表设计器”或:或:“窗口窗口”菜单菜单“数据工作期数据工作期” 选中表选中表“属

8、性属性”“修改修改”= “表设计器表设计器”在表设计器中,在表设计器中, (1) “字段字段”卡片中选择索引为升序或降序。卡片中选择索引为升序或降序。 (2) “索引索引”卡片中选择索引类型。卡片中选择索引类型。.105.2 索引索引 4、索引的建立、索引的建立2)命令方式:)命令方式: (1)创建独立单索引)创建独立单索引 index on to for ADDITIVE 索引索引 按按 到到 对对满足满足 (的记录)新增索引(的记录)新增索引q关键字表达式一般是单个字段,若有多个,则需转化为关键字表达式一般是单个字段,若有多个,则需转化为相同数据类型并用、连接,相同数据类型并用、连接,可以

9、是可以是N、C、D型。型。q索引一旦建立,即自动打开,开始起作用。索引一旦建立,即自动打开,开始起作用。.115.2 索引索引 4、索引的建立、索引的建立2)命令方式:)命令方式: (2)创建复合索引)创建复合索引 INDEX ON TAG ASCE DESC UNIQUE FOR ADDI 索引索引 按按 标识标识 升序升序/降序降序 唯一索引唯一索引 对满足对满足 (的记录)(的记录) 新增新增v当当是由多个字段组成时,多个字段之间用是由多个字段组成时,多个字段之间用“十十”或或“一一”连接,主关键字在最前面,且数据类型要相连接,主关键字在最前面,且数据类型要相同同 。v索引一旦建立,即自

10、动打开,开始起作用。索引一旦建立,即自动打开,开始起作用。.125.2 索引索引4、索引的建立、索引的建立示例:示例: (1)创建独立单索引)创建独立单索引_ 学生表:学生表: 出生年月出生年月 INDE ON 出生年月出生年月 TO CSNY (2)复合索引)复合索引 学生表学生表 首先打开表:首先打开表: USE 学生学生 * TAG1: 姓名降序姓名降序 (普通索引)(普通索引) INDE ON 姓名姓名 TAG XM DESC * TAG2: 性别升序,性别相同时入校总分降序(普通索性别升序,性别相同时入校总分降序(普通索引)引) INDE ON 性别性别STR(10000入校总分,入

11、校总分,3) TAG XBZF.135.2 索引索引5、索引的使用:、索引的使用: 1)打开索引)打开索引 复合索引文件随表文件自动打开复合索引文件随表文件自动打开 单索引文件必须使用命令:单索引文件必须使用命令: (1) 打开表同时打开索引打开表同时打开索引 USE INDE , 打开表打开表 带索引带索引 ,. (2) 表已经打开,再追加打开索引表已经打开,再追加打开索引 USE SET INDE TO , 设置设置 索引索引 为为 ,.145.2 索引索引5、索引的使用:、索引的使用: 2)设置主控索引)设置主控索引 复合索引文件中有多个复合索引文件中有多个TAG(索引标识索引标识) 单

12、索引文件也可能有多个,默认起作用的是第一个。单索引文件也可能有多个,默认起作用的是第一个。 要改变当前起作用的索引项,就要设置主控索引:要改变当前起作用的索引项,就要设置主控索引: (1) 菜单操作菜单操作 “数据工作期数据工作期”选中表选中表“属性属性”“索引顺序索引顺序” 在下拉菜单中选择主控索引在下拉菜单中选择主控索引.155.2 索引索引5、索引的使用:、索引的使用: 2)设置主控索引)设置主控索引 (2) 命令方式命令方式命令命令1:用于单索引列表中指定主索引。:用于单索引列表中指定主索引。 SET ORDER TO 设置设置 主控主控 为为 单索引文件单索引文件 SET ORDER

13、 TO 设置设置 主控主控 为为 第第n个单索引文件个单索引文件.165.2 索引索引5、索引的使用:、索引的使用: 3)更新索引)更新索引 当修改、添加、删除、插入记录时,复合索引将自动当修改、添加、删除、插入记录时,复合索引将自动更新。单索引只有随表打开才能自动更新,否则,将与更新。单索引只有随表打开才能自动更新,否则,将与表记录不一致。表记录不一致。(1) 所有单索引文件必须打开。所有单索引文件必须打开。 (2) 索引更新命令索引更新命令 REINDEX 更新(重新索引)更新(重新索引) 索引索引.175.2 索引索引5、索引的使用:、索引的使用: 4)删除索引)删除索引菜单方式菜单方式

14、1)进入)进入表设计器表设计器。2)在)在“索引索引”卡片中,选中要删除的索引标识,卡片中,选中要删除的索引标识,“删删除除”。或:在或:在“字段字段”卡片中,选中要删除索引的字段,将卡片中,选中要删除索引的字段,将“索索引引”项改为项改为(无)(无)。.185.2 索引索引5、索引的使用:、索引的使用: 4)删除索引)删除索引命令方式:命令方式:DELETE TAG ALL 删除删除 索引标识索引标识 全部全部 同时删除复合索引文同时删除复合索引文件。件。2)DELETE TAG , 删除删除 索引标识索引标识 , 例:例:DELETE TAG XHA 删除复合索引标识删除复合索引标识 XH

15、A (学号的升序索引)(学号的升序索引).195.2 索引索引练习:练习: 结构复合索引:在表设计器中建立学号、姓名、出生日结构复合索引:在表设计器中建立学号、姓名、出生日期的普通索引,在命令窗口依次显示。期的普通索引,在命令窗口依次显示。 用鼠标方式和用鼠标方式和SET ORDER 命令,分别改变主控索引并命令,分别改变主控索引并浏览显示。浏览显示。 建立多关键字索引,先按入校总分(降序),入校总分建立多关键字索引,先按入校总分(降序),入校总分相同,再按出生年月(升序),浏览显示记录内容。相同,再按出生年月(升序),浏览显示记录内容。.205.3 查询查询1、顺序查询:、顺序查询: 菜单方

16、式:菜单方式: 1) 打开表打开表 2)“显示显示”菜单菜单“浏览浏览” 3)“表表”菜单菜单“转到记录转到记录”“定位定位” 4)在弹出的)在弹出的“定位记录定位记录”对话框中:对话框中: 单击单击 “For” 右边按钮,进入右边按钮,进入表达式生成器表达式生成器。 5)生成)生成FOR子句的表达式。子句的表达式。“确定确定”按钮按钮 6)“定位记录定位记录”按钮。按钮。.215.3 查询查询1、顺序查询:、顺序查询:命令方式:命令方式: locate for while CONTINUE ( 继续查找下一个记录继续查找下一个记录)1)在规定范围内)在规定范围内,按照按照使用顺序使用顺序查找

17、满足条件的查找满足条件的第一个第一个记记录录; 2)continue必须放在必须放在locate之后执行之后执行,可重复使用可重复使用, 它在剩下的区域内按照它在剩下的区域内按照使用顺序使用顺序,继续查找继续查找下一条下一条满足满足条件的记录。条件的记录。3)应使用)应使用DISPLAY显示查找结果显示查找结果(为什么不用(为什么不用LIST?).225.3 查询查询例:例: USE 学生情况表学生情况表 LOCA FOR 性别性别=男男 & 注释:第一个男同学注释:第一个男同学 DISP & 仅显示当前记录仅显示当前记录 LOCA FOR 性别性别=男男 & 仍是第一

18、个仍是第一个 DISP CONTI & 第二个男同学第二个男同学 DISP CONTI & 第三个男同学第三个男同学 DISP USE & 表用完后应关闭表用完后应关闭.235.3 查询查询 相关函数相关函数EOF()和()和FOUND()() 无论用直接查找的无论用直接查找的LOCATE、 CONTINUE,还是索引,还是索引查找的查找的 FIND、SEEK ( 不包括不包括SKIP ) : 1)当查找成功时)当查找成功时 EOF()()= .F. FOUND()() = .T. 2) 当查找失败时当查找失败时 EOF()() = .T. FOUND()() = .F

19、. .245.3 查询查询例:例: USE 学生情况表学生情况表 LOCA FOR 三好生三好生 &第一个三好生第一个三好生 ?FOUND(),(), EOF()() & 结果为结果为 .T. (找到)(找到) .F. (未到尾)(未到尾) CONT IF FOUND( ) & 或或 IF .NOT. EOF() DISP USE & 关闭表关闭表 .255.3 查询查询 2、索引查询、索引查询SEEK 检测表达式的值是否相等检测表达式的值是否相等 格式:格式: SEEK 查找第一条满足条件的记录查找第一条满足条件的记录 SKIP 查找下一条满足条件的记录查找下

20、一条满足条件的记录q只能对建立并打开索引的索引关键字进行查找。只能对建立并打开索引的索引关键字进行查找。q能对索引文件关键字为能对索引文件关键字为 C 、N 、 D 型的进行查找;型的进行查找;q可以用可以用 EOF()() 和和 FOUND()() 测试测试 SEEK 的结果,的结果,但只能用但只能用 EOF()() 测试测试 SKIP 的结果。的结果。q复合索引关键字只能用复合索引关键字只能用 SEEK 查询,查询, 且且SEEK后的后的必须与索引表达式相同。必须与索引表达式相同。 .265.3 查询查询2、索引查询、索引查询SEEK 检测表达式的值是否相等检测表达式的值是否相等 USE

21、学生情况表学生情况表 INDE ON 学号学号 SEEK s0201104 ? Found() & 结果为结果为.T. 找到找到 DISP & 显示该同学记录显示该同学记录 INDE ON DATE()-出生年月出生年月 TAG NL SEEK 18 & 注意注意SEEK 后表达式的类型后表达式的类型 DISP & 将显示将显示第一个第一个18岁同学岁同学 SKIP & 定位到定位到第二个第二个18岁同学记录岁同学记录 USE & 关闭表关闭表.275.3 查询查询练习:练习:1、用、用LOCA查找学号为某值的同学。查找学号为某值的同学。 2、用

22、、用LOCA + CONT 查询入校总分高于查询入校总分高于450的各个男的各个男同学记录。同学记录。 3、建立关于入校总分、出生年月的复合索引后,用、建立关于入校总分、出生年月的复合索引后,用索引查询命令索引查询命令 SEEK + SKIP 查找基本工资等于某查找基本工资等于某常量或内存变量的学生。常量或内存变量的学生。 上述过程中,检查上述过程中,检查FOUND()、()、EOF()的值。()的值。.285.4 统计统计 统计符合统计符合“范围范围”和和“条件条件”的的记录个数。记录个数。对符合对符合“范围范围”和和“条件条件”的的N型字段进行型字段进行字段求和字段求和。对符合对符合“范围

23、范围”和和“条件条件”的的N型字段求型字段求字段平均值字段平均值。 对符合对符合“范围范围”和和“条件条件”的的N型字段进行型字段进行算术运算算术运算统计同种类型的统计同种类型的N型字段的型字段的同关键字字段总和。同关键字字段总和。.295.4 统计统计格式格式: ( 默认范围:默认范围: ALL ) COUNT FOR TO 计数计数 范围内范围内 满足满足 记录数记录数 到到 在当前打开的表文件中,统计符合条件的记录个数,在当前打开的表文件中,统计符合条件的记录个数,例例: COUNT FOR 性别性别=“男男” TO A COUNT FOR 三好生三好生 TO B ?男生人数为:男生人数

24、为: ,A & 显示男生人数显示男生人数 ?”三好生:三好生:”STR(B,3)” 个个”.305.4 统计统计格式格式: ( 默认范围:默认范围: ALL,默认字段:所有,默认字段:所有 N 型字段型字段 ) SUM FOR TO 求和求和 范围内范围内 字段表字段表 满足满足的记录的记录 到到 变量表变量表 在当前表文件中在当前表文件中,对符合条件的记录在一个或多个字段上对符合条件的记录在一个或多个字段上 的值进行求和。的值进行求和。 例:例:SUM 入校总分入校总分 FOR 性别性别=女女 TO A 比较比较 : SUM 入校总分入校总分+10 FOR 三好生三好生 TO C 与

25、与 REPLA ALL 入校总分入校总分 WITH 入校总分入校总分+10 FOR 三好生三好生.315.4 统计统计求记录平均值求记录平均值AVERAGE格式格式: ( 默认范围:默认范围: ALL,默认字段:所有,默认字段:所有 N 型字段型字段 )AVERAGE FOR TO 求平均求平均 范围内范围内 字段表字段表 满足满足的记录的记录 到到 变量表变量表 在当前表文件中在当前表文件中,对符合条件的记录在一个或多个字段对符合条件的记录在一个或多个字段上上 的值进行求平均。的值进行求平均。 例:例:AVER 入校总分入校总分 FOR 性别性别=女女 TO A ? “女同学平均入校总分女同

26、学平均入校总分 = ”, A .325.4 统计统计计算命令计算命令CALCULATE格式格式: ( 默认范围:默认范围: ALL)CALCULATE 表达式表表达式表 FOR / WHILE TO / TO ARRAY 计算计算 范围内范围内 表达式表表达式表 对满足对满足的记录的记录 到到 内存变量表内存变量表 或或 到到 数组数组 在当前表文件中在当前表文件中,对符合条件的记录按照表达式表进行对符合条件的记录按照表达式表进行计算,结果可保存在内存变量或数组中。计算,结果可保存在内存变量或数组中。.335.4 统计统计计算命令计算命令CALCULATE 表达式表:表达式表: 由以下函数构成

27、:由以下函数构成: 1) AVG() 对对N型表达式求平均;型表达式求平均; 2) CNT()() 统计满足条件的记录数统计满足条件的记录数 3) MAX() 计算表达式的最大值计算表达式的最大值 4) MIN() 计算表达式的最小值计算表达式的最小值 5) SUM() 求满足条件的表达式的和求满足条件的表达式的和 例例1: 例例2. 计算男生、女生平均分计算男生、女生平均分 USE 学生学生 请大家做请大家做。 CALC MAX(入校总分),入校总分),MIN(入校总分入校总分) TO J , K USE.345.4 统计统计分类汇总命令分类汇总命令TOTAL意义:对学生,按学号分别汇总其选

28、课成绩;意义:对学生,按学号分别汇总其选课成绩; 统计汇总营业员的销售额;等等。统计汇总营业员的销售额;等等。 这些操作无法用这些操作无法用 SUM 简单完成,而可以用简单完成,而可以用 TOTAL 命令一次达到目的。其格式为:命令一次达到目的。其格式为: TOTAL ON TO FOR 汇总汇总 按按 关键字关键字 到到 文件文件 对范围内对范围内 N型字段表型字段表 依据依据.355.4 统计统计功能:数据表中功能:数据表中N型字段按关键字段分组求和。型字段按关键字段分组求和。q当前打开的表文件当前打开的表文件,必须按照关键字段建立索引;必须按照关键字段建立索引;q FIELD 指定要汇总

29、的指定要汇总的N型字段,若省略,则汇总全部型字段,若省略,则汇总全部N 型字段。型字段。例如:例如: 1、对教师表,按性别汇总工资、对教师表,按性别汇总工资 2、对教师表,按职称汇总工资、对教师表,按职称汇总工资.365.4 统计统计练习:练习:写出命令序列:对学生选课表。学生表:写出命令序列:对学生选课表。学生表: 1、COUNT (男生、女生人数)(男生、女生人数) 2、AVERAGE (入校总分,男生、女生平均分)(入校总分,男生、女生平均分) 3、SUM (入校总分)(入校总分) 4。用。用CALCULATE 命令实现上述目标。命令实现上述目标。.375.5 多工作区操作多工作区操作(

30、1)工作区的概念)工作区的概念工作区是工作区是VFP为当前正在使用的数据表文件开辟的一个内存区域。为当前正在使用的数据表文件开辟的一个内存区域。单表操作:单表操作: 在每个工作区中在每个工作区中,用户可以单独打开一个表文件用户可以单独打开一个表文件, 在打在打开表文件的同时开表文件的同时,该区原打开的表文件该区原打开的表文件自动关闭。自动关闭。多表操作多表操作:1、定义:工作区是一块内存区域,用于打开一个表;、定义:工作区是一块内存区域,用于打开一个表;2、VFP提供提供32767个工作区,可以同时打开个工作区,可以同时打开255个表文件。个表文件。3、前、前10个工作区编号为个工作区编号为1

31、,2,3, 10。 英文编号为英文编号为 A ,B,C, J 或或 a、b、c、d、 j.385.5 多工作区操作多工作区操作(2)当前工作区)当前工作区1、定义:用户目前正在操作的工作区,称为当前、定义:用户目前正在操作的工作区,称为当前工作区。工作区。2、无论何时,系统只有、无论何时,系统只有一个一个当前工作区,系统初当前工作区,系统初始化时始化时,自动置第一个工作区为自动置第一个工作区为当前工作区当前工作区,用,用户可用命令选择户可用命令选择当前工作区。当前工作区。.395.5 多工作区操作多工作区操作(3) 表的打开表的打开命令格式:命令格式: USE IN ALIAS v在打开表的同

32、时,关闭原来在该区打开的表。在打开表的同时,关闭原来在该区打开的表。v别名:别名:8个字符以内,个字符以内,若无若无ALIAS子句,则表文件名子句,则表文件名为为默认别名默认别名。例如:例如: USE 学生学生 IN C ALIAS XS &别名别名XS或:或: USE 学生学生 IN 3 ALIAS XS &别名别名XS USE 学生学生 &别名学生别名学生 .405.5 多工作区操作多工作区操作(4)工作区的选择)工作区的选择 命令格式:命令格式: SELECT 功能:为打开的表选择工作区。功能:为打开的表选择工作区。 特别格式:特别格式: SELECT 0 功能:

33、功能: 给出并选择空闲的给出并选择空闲的(未使用未使用)最小工作区号。最小工作区号。 其中,别名有三种:其中,别名有三种: 系统规定的别名系统规定的别名AJ ,不区分大小写不区分大小写; 用用use alias 定义的表的别名定义的表的别名 : 未用未用ALIAS指定别名时,取指定别名时,取表文件名表文件名为别名为别名.415.5 多工作区操作多工作区操作说明:说明: 每个工作区中打开的表都有自己独立的每个工作区中打开的表都有自己独立的记录指针记录指针, 用户只能操作当前工作区打开的表文件用户只能操作当前工作区打开的表文件,并且操作不影并且操作不影响其他工作区的数据和记录指针。响其他工作区的数

34、据和记录指针。 特别地,对表记录的特别地,对表记录的REPLACE写写操作,最好只对当前操作,最好只对当前工作区打开的表文件进行,工作区打开的表文件进行,读读操作(引用)可以通过工操作(引用)可以通过工作区互访对所有工作区进行。作区互访对所有工作区进行。.425.5 多工作区操作多工作区操作(5) 数据工作期数据工作期 作用作用: 设置数据工作环境。设置数据工作环境。 包含包含: 打开表打开表, 表索引表索引, 结构修改结构修改, 表关系表关系; 字段筛选字段筛选, 记录记录过滤过滤; 进入方式进入方式: 1 . “窗口窗口”菜单菜单- “数据工作期数据工作期”; 2. 命令窗口中,使用命令窗

35、口中,使用 SET VIEW ON / OFF 打开打开 / 关闭关闭 数据工作期数据工作期 .435.5 多工作区操作多工作区操作相关函数:相关函数: SELECT(0/1/别名别名) 当前工作区号当前工作区号/最大工作区号最大工作区号/所在工作区号所在工作区号. 无参数时返回当前工作区号无参数时返回当前工作区号.区号区号/别名别名) 指定工作区指定工作区/别名所在工作区打开的表文别名所在工作区打开的表文件名件名.无参数时返回当前区打开的表文件名无参数时返回当前区打开的表文件名. RECNO(区号区号/别名别名) 指定工作区指定工作区/别名所在工作区的记录号别名所在工作区的记录号,无参数时无

36、参数时,返回当前工作区打开表的当前记录号返回当前工作区打开表的当前记录号. ALIAS() 返回指定工作区中表文件名。返回指定工作区中表文件名。数值表达式用于指定工作区号。数值表达式用于指定工作区号。若用若用use alias 打开表,则返回别名。打开表,则返回别名。若用若用use 打开表,打开表,则返回表名。则返回表名。.445.5 多工作区操作多工作区操作(6)工作区的互访)工作区的互访格式:格式: 别名别名 字段名字段名 (减号(减号 + 大于号)大于号)或或: 别名别名 .字段名字段名 说明说明: 在当前工作区中在当前工作区中,可以通过别名方式引用(可以通过别名方式引用(读读方式)方式

37、)其他工作区中打开的表的字段值。其他工作区中打开的表的字段值。.455.5 多工作区操作多工作区操作例:例: CLOSE ALL &关闭所有表关闭所有表 USE 学生学生 &打开学生,别名学生打开学生,别名学生 SELE 0 & 选择新工作区选择新工作区 USE 教师教师 ALIAS JS & 打开教师,别名打开教师,别名JS USE 课程课程 IN 0 ALIA KC & 打开课程,别名打开课程,别名KC ?SELECT() &此时当前工作区为此时当前工作区为3 DISP 学生学生.姓名,姓名,B-姓名,课程名姓名,课程名 & 显示学生

38、姓名,教师姓名,课程表课程名显示学生姓名,教师姓名,课程表课程名.465.5 多工作区操作多工作区操作1、在两个工作区中分别打开学生、在两个工作区中分别打开学生.DBF(不指定别名)和(不指定别名)和选课选课.DBF(别名为(别名为Z);); 2、用、用SELE 命令在工作区间转换;命令在工作区间转换; 3、用、用SELECT()、)、ALIAS( )、)、DBF( )函数检测各工作区;函数检测各工作区; 4、在工作区中移动记录指针,并检测、在工作区中移动记录指针,并检测RECNO( ),),RECNO( )、)、EOF( ),),EOF( )的的值。值。.475.5 多工作区操作多工作区操作

39、(7)表间关系与关联)表间关系与关联 问题的由来:问题的由来:由于各工作区的记录指针各自独立,不能由于各工作区的记录指针各自独立,不能相互带动,给操作带来麻烦。相互带动,给操作带来麻烦。 表关联的目的,表关联的目的,是使其他工作区的记录指针根据是使其他工作区的记录指针根据关键字关键字相等的原则,随同本区的记录指针一起移动。相等的原则,随同本区的记录指针一起移动。 关联可以在两个或多个表之间建立,关联可以在两个或多个表之间建立,但每一步只能建但每一步只能建立两个表之间的关联。立两个表之间的关联。父表父表:建立关联的表,其记录指针将:建立关联的表,其记录指针将带动另一个表的记录带动另一个表的记录指

40、针跟随移动指针跟随移动。子表子表:被关联的表,:被关联的表,其记录指针随父表而动。其记录指针随父表而动。.485.5 多工作区操作多工作区操作关联步骤:关联步骤: 1、首先为子表按关联关键字(例如、首先为子表按关联关键字(例如学生表学生表的学号和的学号和选课选课表表的学号;的学号;选课表选课表为父表,为父表,学生表学生表为子表)建立索引,为子表)建立索引,(若按记录号建立关联,可以不索引)。(若按记录号建立关联,可以不索引)。 2、以父表为当前表以父表为当前表,用菜单方式或命令方式建立关联。,用菜单方式或命令方式建立关联。 建立关联后,当建立关联后,当父表父表指针移动时,指针移动时,子表子表记

41、录指针将同记录指针将同时移动到满足关联条件的记录上。时移动到满足关联条件的记录上。(子表关键字父表(子表关键字父表关键字)关键字)注意:注意:当子表为当前表时,子表记录指针移动,不注意:注意:当子表为当前表时,子表记录指针移动,不能带动附表指针跟随移动。能带动附表指针跟随移动。.495.5 多工作区操作多工作区操作表的关联类型:表的关联类型: 一对一关联一对一关联: 父表与子表间记录按关联关键字一一对应。父表与子表间记录按关联关键字一一对应。 一对多关联一对多关联: 父表的每一个记录按关联关键字与子表的父表的每一个记录按关联关键字与子表的多个记录对应多个记录对应;子表的每个记录仍与父表的一个记

42、录对子表的每个记录仍与父表的一个记录对应。应。 如如学生学生.DBF与与选课选课.DBF 多对一关系多对一关系:父表的多个记录按关联关键字与子表的一父表的多个记录按关联关键字与子表的一个记录对应个记录对应;子表的每个记录仍与父表的一个记录对应。子表的每个记录仍与父表的一个记录对应。如如选课选课.DBF与与课程课程.DBF.505.5 多工作区操作多工作区操作表的关联类型:表的关联类型: 多对多关系多对多关系:父表的多个记录按关联关键字与子父表的多个记录按关联关键字与子表的多个记录对应表的多个记录对应;如教师如教师.DBF与课程与课程.DBF。在在Visual FoxPro中,不直接处理多对多关

43、系,中,不直接处理多对多关系,而是拆分为一对多与多对一关系进行处理。如而是拆分为一对多与多对一关系进行处理。如教师教师课程课程。拆分为:拆分为: 教师教师 授课授课 课程课程 一对多一对多 多对一多对一 .515.5 多工作区操作多工作区操作数据工作期中建立关联:数据工作期中建立关联: 步骤如下:步骤如下: 1、打开要建立关联的两个表;、打开要建立关联的两个表; 2、选中子表为当前工作区,通过、选中子表为当前工作区,通过“属性属性”按钮按钮设置关联关键字为主控索引(若无索引,需通设置关联关键字为主控索引(若无索引,需通过过“修改修改”按钮立即建立)。按钮立即建立)。 3、选中父表为当前工作区,

44、按、选中父表为当前工作区,按“关系关系”按钮与按钮与子表建立关联。子表建立关联。例如:例如: 选课表与学生表;选课表与学生表; 职工简况表与工资表。职工简况表与工资表。关联的删除。关联的删除。.525.5 多工作区操作多工作区操作命令建立关联:命令建立关联:1、打开要建立关联的两个表;、打开要建立关联的两个表;2、选中子表为当前工作区,、选中子表为当前工作区,3、 SET ORDER TO 设置关联关键字为主控索引设置关联关键字为主控索引 或:或: INDE ON 若无索引,立即建立若无索引,立即建立4、选中父表为当前工作区,与子表建立关联。、选中父表为当前工作区,与子表建立关联。格式:格式:

45、SET RELATION TO INTO ADDITVE设置设置 关联关联 为为 到到 子表子表 新增新增.535.5 多工作区操作多工作区操作v关键字表达式应是两个表共有的公共字段;关键字表达式应是两个表共有的公共字段;v当前区当前区打开的,是关联表打开的,是关联表(父表)(父表),可以不索引。,可以不索引。v在另一区打开的是被关联表在另一区打开的是被关联表(子表),(子表),子表必须按关键子表必须按关键字索引。字索引。v选择选择ADDITIVE短语时短语时,以前建立的关联将保留以前建立的关联将保留,由此可由此可建立多区关联,否则以前设置的关联自动取消。建立多区关联,否则以前设置的关联自动取

46、消。v不带任何选项的不带任何选项的SET RELATION TO命令将关闭当前工命令将关闭当前工作区表文件与其他工作区表建立的关联。作区表文件与其他工作区表建立的关联。v一旦建立关联,则当父表的记录指针移动时,子表的记一旦建立关联,则当父表的记录指针移动时,子表的记录指针按关键字相等的原则而随动。录指针按关键字相等的原则而随动。v当子表记录指针移动时,父表的记录指针不随之移动当子表记录指针移动时,父表的记录指针不随之移动。.545.5 多工作区操作多工作区操作例:用表关联查询张继业工资例:用表关联查询张继业工资职工号姓名职称100026 李小明 助教100029 李新助教100030 刘明明

47、副教授100031 张继业 教授100032 孙志助教ZGJK.DBF(父)(父)职工号 职称基本工资100026 助教645.80100029 助教580.00100030 副教授782.90100031 教授1050.50100032 助教605.80GZ.DBF(子)(子)1、在、在GZ中,按公共字段中,按公共字段职工号职工号建立索引;建立索引;2、以、以ZGJK为父表,为父表,GZ为子表,职工号为关键字,建立为子表,职工号为关键字,建立关联;关联;3、查询,显示两表中相应字段;、查询,显示两表中相应字段;.55 5.5 多工作区操作多工作区操作职工号姓名职称100026 李小明 助教1

48、00029 李新助教100030 刘明明 副教授100031 张继业 教授100032 孙志助教ZGJK.DBF(父)(父)职工号 职称基本工资100026 助教645.80100029 助教580.00100030 副教授782.90100031 教授1050.50100032 助教605.80GZ.DBF(子)(子) 命令序列命令序列SELE 2USE GZ ALIAS Z INDE ON 职工号职工号 TAG ZGHA SELE 1USE ZGJK ALIAS JKSET RELA TO 职工号职工号 INTO B LOCA FOR 姓名姓名=张继业张继业? 姓名,职称,姓名,职称, G

49、Z.基本工资基本工资 &显示张继业的情况显示张继业的情况SET RELA TO &取消关联取消关联CLEA ALL &关闭表关闭表.56 5.5 多工作区操作多工作区操作 一对多关联一对多关联若父表为一,子表为多关系,为了正确浏览多方(子表)若父表为一,子表为多关系,为了正确浏览多方(子表)记录,应通过命令说明。记录,应通过命令说明。命令格式:命令格式: 1、 SET SKIP TO 设置设置 跳进跳进 到到 子表子表 说明:说明: 首先应正常使用首先应正常使用SET RELA TO 命令建立关联。命令建立关联。然后再用此命令。然后再用此命令。 2、 SET SKIP

50、TO 取消取消 一对多关系一对多关系 。.57 5.5 多工作区操作多工作区操作( 8 ) 多表关联多表关联 在两个以上的表之间建立关联,按连接方式,可以分在两个以上的表之间建立关联,按连接方式,可以分为两种:为两种:1、串接、串接表B表C关联关联1关联关联2表表A 是表是表B 的父表,它们之间建立关联;的父表,它们之间建立关联;表表B 是表是表C 的父表,它们之间也建立关联;的父表,它们之间也建立关联; .58 5.5 多工作区操作多工作区操作串接示例:串接示例:授课授课课程课程教师号教师号课程号课程号步骤:步骤:1、打开三个表;、打开三个表;2、授课表授课表按按教师号教师号索引,索引,课程

51、表课程表按按课程号课程号索引;索引;3、建立、建立教师表教师表到到授课表授课表的关联,并指定一对多关系;的关联,并指定一对多关系;4、建立、建立授课表授课表到到课程表课程表的关联。的关联。5、用、用LIST命令查看教师授课的命令查看教师授课的课程名、课时课程名、课时等情况。等情况。.59 5.5 多工作区操作多工作区操作 串接示例命令序列串接示例命令序列USE 课程课程 IN 0 & 先打开子表先打开子表 课程表课程表 USE 授课授课 IN 0 & 打开子表打开子表 授课表授课表 USE 教师教师 IN 0 & 最后打开父表最后打开父表教师表教师表SET ORDER

52、TO TAG 教师号教师号 IN 授课授课 &设置子表主控索引设置子表主控索引SET ORDER TO TAG 课程号课程号 IN 课程课程 &设置子表主控索引设置子表主控索引SELE 教师教师SET RELATION TO 教师号教师号 INTO 授课授课 &第一级关联第一级关联SET SKIP TO 授课授课 & 说明一对多关系说明一对多关系SELE 授课授课SET RELATION TO 课程号课程号 INTO 课程课程 &第二级关联第二级关联SELE 教师教师 & 设置主表为当前表设置主表为当前表LIST 姓名姓名,课程课程.课程名课程名

53、,课程课程.课时课时 &开始访问三表数据开始访问三表数据.60 5.5 多工作区操作多工作区操作2、并接、并接 表表B 是表是表A的父表,它们之间建立关联;的父表,它们之间建立关联; 表表B 是表是表C的父表,它们之间也建立关联;的父表,它们之间也建立关联;学生学生课程课程学号学号课程号课程号.61 5.5 多工作区操作多工作区操作并接示例:并接示例:学生学生课程课程学号学号课程号课程号步骤:步骤:1、打开三个表;、打开三个表;2、学生表学生表按按学号学号索引,索引,课程表课程表按按课程号课程号索引;索引;3、建立、建立教师表教师表到到授课表授课表的关联;的关联;4、新增建立、新增建立

54、授课表授课表到到课程表课程表的关联(的关联(ADDITIVE)。5、用、用LIST命令查看学生选课的命令查看学生选课的课程名、课时、成绩课程名、课时、成绩。.62 5.5 多工作区操作多工作区操作 并接示例命令序列并接示例命令序列USE 课程课程 IN 0 & 先打开子表先打开子表 课程表课程表 USE 学生学生 IN 0 & 打开子表打开子表 学生表学生表 USE 选课选课 IN 0 & 最后打开父表最后打开父表选课表选课表SET ORDER TO TAG 课程号课程号 IN 课程课程 SET ORDER TO TAG 学号学号 IN 学生学生 &设置子表主控

55、索引设置子表主控索引SELE 选课选课SET RELATION TO 学号学号 INTO 学生学生 &关联一关联一SET RELATION TO 课程号课程号 INTO 课程课程 ADDI &关联二关联二SELE 选课选课 & 设置主表为当前表设置主表为当前表LIST 学生学生.姓名姓名,课程课程.课程名课程名,课程课程.课时课时,成绩成绩 &开始访问三表数据开始访问三表数据.63 5.5 多工作区操作多工作区操作 关联小结关联小结1、注意事项:、注意事项: 1)父表记录指针的移动通过子表的索引带动子表的记)父表记录指针的移动通过子表的索引带动子表的记录指针移动

56、,所以:录指针移动,所以: 子表必须索引;子表必须索引; 子表无法带动父表。子表无法带动父表。 2)不能建立表的环状关联。)不能建立表的环状关联。2、建立关联时,父表、子表的选择:、建立关联时,父表、子表的选择: 1) 要进行修改的表一般应该是父表;要进行修改的表一般应该是父表; 2) 在多对一关系中在多对一关系中,关键字多方的表,应设为父表,关关键字多方的表,应设为父表,关 键字一方的表,应作为子表。键字一方的表,应作为子表。 3)多表关联时,综合考虑上述两点及操作的方便性。)多表关联时,综合考虑上述两点及操作的方便性。.64 5.5 多工作区操作多工作区操作 ( 9 ) 表的连接表的连接格

57、式:格式:JOIN WITH TO FOR FIELDS 连接连接 与与 别名表别名表 到到 新文件新文件 对满足条件的记录对满足条件的记录 按字段表按字段表 执行过程:执行过程: 从从当前工作区当前工作区中中第一条记录第一条记录始始,在指定的在指定的别名工作区别名工作区表中找满足条件的记录表中找满足条件的记录,每找到一条记录每找到一条记录,就将就将当前工作当前工作区区中的中的当前记录当前记录与指定的与指定的别名工作区别名工作区中找到的记录中找到的记录,连连接成一条接成一条新记录新记录存于新表文件中。存于新表文件中。 当前表当前表记录指针前移一位,继续以上操作,直到当记录指针前移一位,继续以上

58、操作,直到当前表记录指针到达前表记录指针到达EOF。.65 5.5 多工作区操作多工作区操作( 9 ) 表的连接表的连接1)FOR 是必选项是必选项, 两个表必须按条件的要求进行连接两个表必须按条件的要求进行连接,连接中最常用的是等值连接连接中最常用的是等值连接,即即连接条件为两个表中公共字段值应相等。连接条件为两个表中公共字段值应相等。2)如选择了)如选择了FIELD , 则连接生成的新表文件中字段按字段表来确定则连接生成的新表文件中字段按字段表来确定,字段表中的字段必字段表中的字段必须是当前工作区或指定的别名工作区的字段须是当前工作区或指定的别名工作区的字段3)一次只能联结两个表,若要联结

59、多个,应分步进行;)一次只能联结两个表,若要联结多个,应分步进行;4)与)与SORT和和TOTAL一样,新表不会自动打开,一样,新表不会自动打开,而应使用而应使用USE命令打命令打开。开。5)两个表都不需要排序或索引。)两个表都不需要排序或索引。.66 5.5 多工作区操作多工作区操作表的连接示例表的连接示例学号姓名 性别 出生日期s0201101 王小平 男 1984-10-23 s0201102 张 强男1984-8-12s0201103 刘 雨女1985-1-2s0201104 江 冰男1984-7-24s0201105 吴红梅 女1984-5-12学号课程号成绩s0201101 c11

60、090s0201101 c12087s0201102 c11080s0201102 c15066s0201103 c13094s0201103 c14050s0201104 c11076课程号课程名课时c110数学建模80c120计算机网络60c130日语80c140数据库60c150商业会计70c160电子商务50C162操作系统64学号姓名课程名课时成绩s0201101 王小平数学建模8090s0201101 王小平 计算机网络6087s0201102 张 强数学建模8080s0201102 张 强商业会计7066s0201103 刘 雨日语8094s0201103 刘 雨数据库6050s0201104 江 冰数学建模8076s0201105 吴红梅 计算机网络6082从学生表从学生表 、选课表,课程表、选课表,课程表生成完整的学生课程表生成完整的学生课程表 .67 5.5 多工作区操作多工作区操作表的连接示例表的连接示例第一步:第一步: 学生表学生表 、选课表,按学号相等生成新的学、选课表,按学号相等生成新的学 生生选课表。选

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论