利用 Visual FoxPro 可以查询多个表和视图,同时可以把远程和本地数据合并到一个视图中。当需要的数据存储在两个或多个表中,或者分散在本地表和远程数据源的表中时,这个功能非常实用。
有关建立简单的单表查询和视图的详细内容,请参阅第四章“检索数据”和第五章“使用视图更新数据”。有关连接的详细内容,请参阅《程序员指南》中的第七章“处理表”。
本章内容要点:
当需要获取存储在两个或更多表中的信息时,只要把所有有关的表添加到查询中并用公共字段联接它们就可以了。此后搜索所有这些表中的记录时便可以查找所需的信息。在查询中可以使用数据库表、自由表、本地或远程视图的任意组合。
在查询中使用多表或视图
因为“视图”可以指输入源或正在创建的对象,“表”用来表示表和作为输入源的视图,所以“视图”在此处表示用“视图设计器”创建的对象。
向查询中添加表或视图时,Visual FoxPro 根据匹配的字段建议一个可能的表或视图之间的联接。
例如,如果在“查询设计器”中加入 Visual Studio …\Samples\Vfp98\Data 中的 Customer 表,然后加入 Orders 表,Visual FoxPro 就建议按匹配的字段 Customer.cust_id 和 Orders.cust_id 建立表之间的联接。
建立表之间的联接
如果使用的数据库中,表或视图间具有永久关系,Visual FoxPro 就利用这些已有的关系作为默认的联接。
若要在查询中添加数据库表或视图,需要先打开适当的数据库,运行该数据库。
若要在查询中添加表或视图
— 或者 —
若想添加的表不在数据库中,则请选择“其他”按钮,在“打开”对话框中选定想加入的表,选择“确定”按钮。
若 Visual FoxPro 找不到这样的匹配字段,则应该由您自己在“联接条件”对话框中选择匹配的字段。
如果查询中有多个表,可用更新或添加联接来控制查询选择的记录。使用“联接条件”对话框,可改变表之间的联接类型。
添加表时会自动显示联接。但是,如果相关的字段名不匹配,则必须自己创建表间的联接。也可以创建其它的联接,方法是在“查询设计器”中,拖动表中的字段与另一表中的字段联接;或者从“查询设计器”工具栏上选择“添加联接”按钮,这时会显示“联接条件”对话框。
“联接条件”对话框
添加或变更联接时,可选择联接类型来扩充或缩小结果。创建联接的最简单方法是使用“联接条件”对话框。
若要创建表之间的联接
注释 仅当字段的大小相等、数据类型相同时才能联接。
若要检索... | 请使用... |
两个表中仅满足条件的记录,这是最普通的联接类型。 | 内部联接 |
表中联接条件左边的所有记录,和表中联接条件右边的且满足联接条件的记录。 | 左联接 |
表中联接条件右边的所有记录,和表中联接条件左边的且满足联接条件的记录。 | 右联接 |
表中不论是否满足条件的所有记录。 | 完全联接 |
有关“联接”的详细内容,请参阅《程序员指南》中的第八章“创建视图”。
您也可以删除或修改现有的联接。虽然没有联接仍能运行查询,但所得的查询结果一般很少有实用价值,并且执行时间往往很长。
若要删除联接
– 或者 –
在“联接”选项卡中选择联接条件,然后选择“移去”。
除了筛选和联接类型外,还可通过改变联接的条件来控制结果。联接不必基于完全匹配的字段;可基于“Like”、“==”、“>”或“<”条件设置不同的联接关系。
联接条件和筛选条件类似;二者都先比较值,然后选出满足条件的记录。不同之处在于筛选是将字段值和筛选值进行比较,而联接条件是将一个表中的字段值和另一个表中的字段值进行比较。
例如,当查询用各自的 customer ID 字段 (Customer.cust_id = Orders.cust_id) 联接的两个表时,查询只检索与这两个字段相匹配,同时也符合查询中设置的其他筛选条件的记录。
若要修改联接
有关在联接条件中使用的逻辑运算符的详细内容,请参阅“逻辑运算符”部分。
可以在本地视图中合并两个或多个本地表。定义多表视图的过程类似于在查询中对多表进行操作的过程,但使用视图时,可以在对视图的输出进行操作的过程中更新源表内容。
例如,可以把 Visual Studio …\Samples\Vfp98\Data 中的 Customer 表和 Orders 表联接在一个视图中,并设置选定条件挑选出组合记录的一个子集,当在“浏览”窗口或表单中更新数据时,这些更新会被返回到源表中。
在视图中合并表
若要在视图中联接表
若要使源表可更新
注释 若要激活“发送 SQL 更新”选项,必须先在表中设置关键字段。
有关控制表的更新的详细内容,请参阅第《程序员指南》中的第十七章“共享访问程序设计”。
与远程数据源建立连接时,这个数据源可能包含许多相关表。您可以从中选择需要的表。需要的话还可以调整这些选取表之间的关系,获得所需的信息。
例如,假设连接到了一个出版数据库上,其中包含许多内部相关的表。如果要搜索关于标题和作者的信息,可以利用三个相关的表:authors、titles 和 titleauthor。
在远程视图中的多个表
若要创建多表远程视图
与本地视图一样,可以利用视图设计器中的“更新条件”选项卡中的选项控制源表的更新方式。
如果需要的数据存贮在远程数据源中,并且又与本地表中的信息相关,就可以在一个视图中合并本地数据和远程数据。
首先,可以创建远程视图,从远程服务器上仅挑选出想操作的相关记录;然后,利用本地视图,把该远程视图和相关的本地表联接起来。
例如,假设有一个巨大的主要客户数据库存放在服务器上,并且有一个本地表存贮了订货信息。可以创建远程视图,连接到服务器上并挑出感兴趣的客户记录;然后再创建一个本地视图,并将该远程视图和本地表添加到其中。
当利用本地视图的记录输入新的订单时,可以选择更新远程视图和本地表。如果关闭本地视图,然后关闭远程视图,远程视图会更新在远程客户数据库上的表。
在本地视图中的远程视图和本地表
若要在视图中合并远程和本地数据
有关在其他视图中处理视图的详细内容,请参阅《程序员指南》中的第八章“创建视图”。