1.数据表的关联
前面已经提到,在各工作区中打开的数据表文件,都有各自独立的记录指针,在一般情况下不会相互干扰,当两个数据表建立了关联关系后,这两个数据表的指针便会联合行动,即当前数据表指针重新定位后,与之关联的另一个工作区中的数据表指针也将按照指定的条件跟随移动。
建主关联关系的两个数据表中,当前数据表为主动,称为“父”表,另一个工作区中的文件为被动,称为“子”表。这种联接关系仅仅是在数据表之间建立起一种逻辑关系,或者说是建立记录指针之间的联系,因此又称这种数据表之间的关联关系为逻辑联接。
【格式】SET RELATION TO [关键字表达式1/数值表达式1> INTO <工作区号>|<别名>][关键字表达式2/数值表达式2> INTO <工作区号>|<别名>…] [ADDITlVE]
【功能】使当前工作区的数据表与别名工作区的数据表建立关联,从而实现由别名指定的数据表向当前数据表自动提供数据信息。
数据表的关联操作是以文件记录指针的关联为基础,对此还需要说明以下几点:
(1)在使用本命令之前,父表必须在当前工作区打开,而子表必须在另一个工作区中打开,并在命令中以别名标出。在一条SET RELATION 命令中可以创建一个父表与多个子表之间的关联,各个关系之间用逗号隔开。
(2)建立数据表之间的关联可以通过表达式(关键字、记录号和数值型表达式)来实现。
(3)若按关键字建立关联,则子表必须先按此关键字进行索引,并且打开子表的同时也打开此索引文件。
对建立了关联的两数据表操作时,当父表记录指针定位在某条记录上时,在子表中就自动执行一次SEEK<关键字表达式>命令。也就是说,若在子表中找到了与父表中关键字表达式值相匹配的首记录,则子表的记录指针就定位于该记录上,若找不到,则子表指针移至文件尾。
(4)若按<数值型表达式>建立关联,则在子表中自动执行一次GO <数值型表达>命令,也就是说,子表的记录指针就定位于记录号等于<数值型表达式>的值所指定的那个记录上,这种关联又称作记录号关联。
用记录号进行关联,父表与子表都不必打开索引文体,也不一定需要有相同的字段。
(5)ADDITIVE选项表示建立关联时仍然保留该工作区与其他工作区已经建立的关联。
(6)如果命令中的所有选择项都缺省,就撤销当前数据表已经建立的一切关联。
(7)如果要取消父表与子表之间的关联,可以使用命令:
SET RELATION OFF INTO <工作区号>|<别名>
【例3-46】在“教师”表与“专业信息”表之间以编号为关键字建立关联,并显示编号、姓名、专业、职称和工作年限的信息。
显示结果如下:(www.xing528.com)
从此例可以看出,建立关联的两个数据表的记录指针可以同步移动。表之间的这种逻辑联接会随着数据表的关闭而自动关闭,下次使用时必须重新建立。我们以前讲过的建立数据表之间的永久关系是存在数据库中的,随着数据库的打开而打开,每次使用时不需要重新建立。但永久关系不能控制不同工作区的记录指针的同时移动。
2.数据表的物理连接
数据表的连接是将两个数据表连接在一起,生成一个新的数据表文件,这种连接又称物理连接。
【格式】JOIN WITH <工作区号>|<别名> TO <新表文件名> FOR<连接条件>[FIELDS<字段名表>]
【功能】将不同工作区的两个数据表连接,产生一个新的数据表。
【说明】1)把要连接的数据表分别在不同的工作区打开,以别名指出的被连接的数据表所在的工作区称为副区,与之连接的另一个数据表所在的工作区,应为当前工作区,称为主区。
2)以<新表文件名>指出连接所生成的新数据表的名字。
3)FIELDS<字段名表>指定新数据表所包含的字段。若无此选项,连接后所产生的新数据表中将包含原来两数据表中的所有字段。
4)FOR<连接条件>指定两个数据表之间的连接条件。
两个数据表的连接过程如下:
(1)执行该命令后当前数据表的记录指针指向文件首记录。
(2)顺序察看副区文件的记录,将满足给定条件的副区记录分别与主区当前记录连接成新记录,存入到新数据表中,直至所有副区记录处理完毕。
(3)主区数据表指针向下移动一个记录位置,再回第(2)步,直至把主区数据表所有记录全部处理完毕为止。
连接过程中,如果当前数据表的某一条记录在被连接的数据表中找不到相匹配的记录,则不在新表中生成记录。
【例3-47】将“教师”表“专业信息”表通过编号进行连接,连接后生成的新数据表为“教师专业”,新表中包含如下字段:编号、姓名、性别、专业、职称、工作年限。
显示结果如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。