Presentation is loading. Please wait.

Presentation is loading. Please wait.

计算机文化基础 第 13 章 多表操作. 多表操作 以前所进行的操作中,在同一时刻只能打开一个表文 件,这是单工作区操作。但是在有些情况下,我们需要同时 了解多个表文件中的内容,例如 图 8-1 。在表文件 Stud1.DBF 中,有姓名,班级,电话三项;在 Stud2.DBF 中, 有姓名,性别,籍贯,英语四个字段。在单工作区操作方式.

Similar presentations


Presentation on theme: "计算机文化基础 第 13 章 多表操作. 多表操作 以前所进行的操作中,在同一时刻只能打开一个表文 件,这是单工作区操作。但是在有些情况下,我们需要同时 了解多个表文件中的内容,例如 图 8-1 。在表文件 Stud1.DBF 中,有姓名,班级,电话三项;在 Stud2.DBF 中, 有姓名,性别,籍贯,英语四个字段。在单工作区操作方式."— Presentation transcript:

1 计算机文化基础 第 13 章 多表操作

2 多表操作 以前所进行的操作中,在同一时刻只能打开一个表文 件,这是单工作区操作。但是在有些情况下,我们需要同时 了解多个表文件中的内容,例如 图 8-1 。在表文件 Stud1.DBF 中,有姓名,班级,电话三项;在 Stud2.DBF 中, 有姓名,性别,籍贯,英语四个字段。在单工作区操作方式 下,同时只能打开一个文件,若要想同时查看姓名,班级, 英语三项内容就很麻烦。在这种情况下,可以用多工作区的 方式来解决。单工作区操作 图 8-1 在这一章里,我们需要用到两个以上的表,所以,请 大家根据 rsda.dbf 的内容再建立两个新表 xl.dbf 和 tz.dbf ( 单击查看 “ 学历表 ” xl.dbf 结构 ) 单击查看 “ 学历表 ” xl.dbf 结构 ( 单击查看 “ 增加工资表 ” tz.dbf 结构 ) 单击查看 “ 增加工资表 ” tz.dbf 结构 开 始开 始

3 图 8-1 姓名班级电话 李名 99 针推 5680111 李江 00 中药 5680021 孙兵 02 中医 5680055 赵亮 03 护理 5680022 王红 98 骨伤 5680123 姓名性别籍贯英语 孙兵男开封 67 赵亮男洛阳 87 李名男郑州 89 王红女信阳 78 李江女郑州 66 表 stud1.dbf 表 stud2.dbf

4 学历表 XL.dbf 的结构 XL.dbf 中有三个字段: 编号 C 4 姓名 C 6 学历 C 4 其中 编号 和 姓名的类型 与内容与 rsda.dbf 一样, 指的是同一批人。

5 增加工资表 TZ.dbf 的结构 TZ.dbf 中有三个字段: 编号 C 4 姓名 C 6 增加工资 N 5 其中 编号 和 姓名的类型 与内容与 rsda.dbf 一样, 指的是同一批人。

6 第一节 工作区的概念 ( 1 ) 工作区 —— 就是内存中的一个存储区域,用来存放从外 存调入内存的表文件,一个工作区内同时只 能打开一个表文件。 工作区代号 —— 每个工作区都有一个代号, 分别用 1,2, …… 32767 表示。 工作区别名 —— 用户在工作区中打开某个数据表时所赋 给的别名。对于前十个工作区,也可以用 A – J 来作为别名表示。

7 工作区的概念 ( 2 ) 工作区相互独立 —— 各工作区中表文件的记录指针相互 独立,例如用户对 1 号工作区中的表文件进行操作,并不 会改变 2 号工作区中表文件的指针位置。 当前工作区 —— 为了能同时打开多个表文件,可以在内 存中开辟多个工作区,每个工作区中可以打开一个不同 的表文件。在某一时刻,用户同时只能在一个工作区内 操作,此工作区叫当前工作区,又叫主工作区。用户可 以根据需要改变当前工作区。

8 单工作区操作 Use rsda 打开表文件 rsda.dbf ,也就是将 rsda.dbf 从外存调 入到内存中,默认状态下,内存中只开辟了一个工作区, 用来存放从外存调入内存的表文件,且一个工作区中同 时只能打开一个表文件。例如如下操作。 Use rsda List Use xl 当用户打开 xl.dbf 时,尽管用户并没有对 rsda.dbf 执行关闭操作 (use) ,但是,系统会自动先关闭前一个表 文件 rsda.dbf , 然后再打开 xl.dbf 。

9 第二节 如何同时打开多个表文件 建立 ( 开辟 ) 、选择工作区 格式: SELECT 功能:建立指定的工作区或使指定的工作区成为主工作区。 例如:使表文件 rsda.dbf 和 xl.dbf 同时处于打开状态。 select 1 将 1 号区置为当前工作区 use rsda 在 1 号区中打开 rsda.dbf select 2 将 2 号区置为当前工作区 use xl 在 2 号区中打开 xl.dbf ,不影响 1 号区中的文件。 list 显示 xl.dbf 的内容 select 1 再次将 1 号区置为当前工作区 list 显示 1 号工作区中已打开的表文件的内容

10 第三节 工作区间的互相访问 只有在当前工作区中,用户可以打开或关闭表文件,用 户可以对当前工作区中已打开的表文件进行任意操作,包括 增、删、改、编辑、定位、查询等。用户不能对其它非当前 工作区中的表文件进行此类操作,但是,用户可以访问其它 工作区中已打开的表文件里的当前记录的各个字段值。 不论用户当前位于哪个工作区,都可以引用在其他工作 区中打开的表中的字段,引用时,要在此字段前加上被访问 工作区的别名。引用格式如下: 别名 -> 字段名 说明: 可以是 A – J 中的一个,或者干脆就用被访问的文件名, 指明了被访问的文件中的字段,箭头是减号和大于号的组合。 注意:哪个字段不是当前工作区的,须用 某区的别名  表示 看图说明

11 例题分析 显示当前表文件的内容 表示显示 A 工作区中已打开的表 文件的当前记录的职称字段的 值。由于其不在当前工作区, 所以前面要加上工作区别名。 例题:对 rsda.dbf 和 xl.dbf 进行操作,显 示黄丽丽的姓名、学历、职称的内容。

12 例题分析 本题中,因为我们的目的是显示黄丽丽的姓名、学历、职称, 而这三个字段分处在两个表文件中,所以需要同时打开两个表 文件 rsda.dbf 和 xl.dbf 。 由于工作区之间是相互独立的,在 1 号工作区中将记录指针 指向黄丽丽的记录,并不能保证 2 号工作区中的记录指针也指 向黄丽丽,所以,在两个工作区里都执行了查找定位操作 Locate for 姓名 =‘ 黄丽丽 ’ 将黄丽丽的记录置为当前记录 命令 disp 姓名, 学历,A-> 职称中,由于职称字段不在当前工 作区中,所以在他的前面要加上其所在工作区的别名 A-> 。注 意: A-> 职称表示显示 A 区中当前记录的职称字段的值。 问题:最后一条命令为什么不能写成 list field 姓名, 学历,A-> 职称

13 第四节 表文件间的关联 在上一节工作区互访的例题中,由于两个工作区之间记录 指针是相互独立的,所以需要分别在两个工作区中进行定位 操作,将黄丽丽的记录都置为当前记录,然后才能同时显示 黄丽丽的姓名、学历、职称三个字段的值。如果要显示另一 个人的内容,还要再次进行定位操作,比较麻烦。 解决的方法是:将在不同工作区中打开的表文件,按照 表与表之间的公共字段建立逻辑联系,当主表文件 ( 主动表 ) 的记录指针移动时,另一个工作区中与之具有逻辑关联的表 文件 ( 被动表 ) 记录指针也相应的移动,从而使多表操作变的 很方便。这种方法叫做表文件间的关联。

14 格式: Set relation to [ 关系表达式 ] into 功能:根据 [ 关系表达式 ] ,建立当前工作区中的表文件 ( 主动表 ) 与 所指定的工作区中的表文件 ( 被动表 ) 之间的关联。 说明: 1 、建立关联之前,主动表与被动表必须在不同的工作区中同时被打开。 2 、关联建立好以后,当移动主动表中记录指针时,被动表中的记录指 针也会根据所建立的关联自动的做相应地移动,反之不行。 3 、若两个表是按照它们的某个关键字段 ( 公共字段 ) 建立的关联,则建 立关联之前,被动表必须按此关键字段建立了索引,且索引文件已打 开。除非是按照记录号表达式建立的关联。 4 、取消关联可用 SET RELATION TO 5 、若想在保留当前关联关系的前提下,增加与其他数据库的关联。则 可在建立第二个关联时加上 ADDITIVE 子句。否则,就会将前一个关 联取消。 例题 : 例 1 例 2 例 3 例 1 例 2 例 3 表文件间的关联

15 例题 1: 在 rsda.dbf( 主动表 ) 与 xl.dbf( 被动表 ) 之间按照编号 建立关联,使得当 rsda.dbf 的记录指针指向某一记录时, xl.dbf 的记录指针也指向相同编号的记录。 说明: 在 1 区打开表 xl 按关键字建立索引 在 2 区打开表 rsda 在主工作区中建立关联 将主动表的记录指针指向 ‘ 0104 ’ 号记录 选择工作区,将当前工作区变为被动表( xl) 所在的工作区 (1 号工作区) 可以看出被动表的指针也指向编号为 0104 的记录

16 例题 2: 在 rsda.dbf( 主动表 ) 与 xl.dbf( 被动表 ) 之间按照姓名 建立关联,然后显示所有人的编号、姓名、学历、职称字段的 内容。 由于学历不在 当前工作区, 所以前面要加上 其所在工作区别名 前缀

17 例题 3: 在 rsda.dbf( 主动表 ) 与 xl.dbf 及 tz.dbf 按照姓名 建立关联,然后显示所有人的编号、姓名、学历、职称、 增加工资字段的内容。 SELE 2 USE XL INDEX ON 姓名 TO XM1 SELE 3 USE TZ INDEX ON 姓名 TO XM2 SELE 1 USE RSDA SET RELATION TO 姓名 INTO B SET RELATION TO 姓名 INTO C ADDITIVE LIST 编号, 姓名,B-> 学历, 职称,C-> 增加工资

18 第五节 表文件间的连接 如果能想办法将原本不在同一个表文件中的字段 合并到同一个表中,则接下来的操作就变成了单表操 作了。 连接命令就是将两个表文件连接生成一个新表, 新表中可以包含两个老表里的各个字段。 由于连接命令的结果要生成一个新表,所以会占 用额外的存储空间。

19 表文件间的连接 格式 : JOIN WITH TO [FIELDS ] FOR 功能:将当前工作区中的表文件按照 FOR 后面的 与 〈别名〉所指定的工作区中的表文件进行连接,连接的结果 放入 所指定的表文件中。

20 表文件间的连接 说明: 1 、 省略 field 时,新表文件将包含两表文件的所有 字段。否则新表中的字段为 中指定的字段。 工作区中的字段应写为 -> 。 2 、省略 for 时,则主表中每个记录都将和辅表中每个记 录连接,新表中的记录数将是主表的记录数乘以辅表的记录数。 所以一般情况下,必须给出 for ,并应注意条件的唯一性。 例: for 姓名 =b-> 姓名 或 for 编号 =b-> 编号 3 、两个被连接的表文件必须分别在主工作区和 工作区中 被打开,且都不需要排序或索引。 4 、 单击显示 本命令的执行过程 单击显示 本命令的执行过程 5 、 看图说明 : 看图说明

21 连接命令的执行过程 先将主表文件的当前记录置为第一条记录,然后按给 定的条件对别名表中的每一条记录依次进行判断,若满足 条件,由 fields 生成一条新记录,并加入到 新生成的表中。然后接着在辅表文件中继续寻找符合条件 的记录,找到后再和主表文件中当前记录连接形成第二个 记录追加到新文件中。依次下去,直到没有满足条件的记 录,此时,主表文件当前记录后移一个记录,再反复上述 操作,直到主表文件的当前记录指向文件尾,则结束连接。

22 例题 : 在 rsda.dbf 与 xl.dbf 之间按照姓名相等的原则 建立连接,生成的新表 rx.dbf 中包含姓名、性别、职称 学历字段的内容。 按照姓名相等 的原则 注意:连接的结 果存放在新表中


Download ppt "计算机文化基础 第 13 章 多表操作. 多表操作 以前所进行的操作中,在同一时刻只能打开一个表文 件,这是单工作区操作。但是在有些情况下,我们需要同时 了解多个表文件中的内容,例如 图 8-1 。在表文件 Stud1.DBF 中,有姓名,班级,电话三项;在 Stud2.DBF 中, 有姓名,性别,籍贯,英语四个字段。在单工作区操作方式."

Similar presentations


Ads by Google