对于多个相似的选择查询,当您希望将它们返回的所有数据一起作为一个合并的集合查看时,便可以使用联合查询。
本文将向您介绍如何根据两个或多个现有的选择查询创建联合查询,同时说明如何使用结构化查询语言 (SQL) 编写联合查询。
为完成本文中的示例,您应该对如何创建和运行选择查询有基本的了解。有关如何创建选择查询的详细信息,请参阅请参阅部分中的链接。
本文内容联合查询可合并多个相似的选择查询的结果集。
例如,假设您有两个表,一个用于存储有关客户的信息,另一个用于存储有关供应商的信息,并且这两个表之间不存在任何关系。又假设这两个表都有一些存储联系人信息的字段,而您希望同时查看这两个表中的所有联系人信息。
您可以为每个表都创建一个选择查询 (选择查询:就表中存储的数据提出问题,然后在不更改数据的情况下以数据表的形式返回一个结果集。),以便只检索包含联系人信息的那些字段,但返回的信息仍将位于两个单独的位置。要将两个或多个选择查询的结果合并到一个结果集中,可以使用联合查询。
联合查询中合并的选择查询必须具有相同的输出字段数、采用相同的顺序并包含相同或兼容的数据类型。在运行联合查询时,来自每组相应字段中的数据将合并到一个输出字段中,这样查询输出所包含的字段数将与每个 Select 语句相同。
注释 根据联合查询的目的,“数字”和“文本”数据类型兼容。
联合查询是特定于 SQL 的。特定于 SQL 的查询不能在“设计”视图中显示,因此必须直接用 SQL 编写。在 Microsoft office Access 2007 中,您可以使用“SQL 视图”对象选项卡编写特定于 SQL 的查询,包括联合查询。
提示 每个查询都可以用 SQL 语句来表达。此外,大多数查询也可以在查询设计网格 (设计网格:在查询设计视图或“高级筛选/排序”窗口中设计查询或筛选时所用的网格。对于查询,该网格以前称为“QBE 网格”。)中表达,如果此环境可用,构建查询将更加轻松。在使用设计网格创建查询时,您始终都可以切换到 SQL 视图,以查看运行查询时所处理的 SQL 语句。在 SQL 视图中查看查询是一种很好的做法,因为您可以通过此途径熟悉 SQL 并加深对查询工作方式的理解。在某些情况下,您还可以使用 SQL 视图对未返回预期结果的查询进行故障排除。
在联合查询中,每个选择查询(又称为 Select 语句)都有一个 SELECT 子句和 FROM 子句,还可能有 WHERE 子句。SELECT 子句列出包含要检索的数据的字段;FROM 子句列出包含这些字段的表;WHERE 子句则列出这些字段的条件。联合查询中的 Select 语句用 UNION 关键字组合在一起。
对于合并了两个选择查询的联合查询,其基本 SQL 语法如下:
SELECT field_1[, field_2,…] FROM table_1[, table_2,…] UNION [ALL] SELECT field_a[, field_b,...] FROM table_a[, table_b,…];
例如,假设您有两个表,分别名为 Products 和 Services。这两个表都具有包含下列内容的字段:产品或服务的名称、价格、保修或担保条款以及是否以独占方式提供产品或服务。虽然 Products 表存储了保修信息,而 Services 表存储了担保信息,但基本信息是相同的(即特定的产品或服务是否符合其质量承诺)。您可以使用联合查询将两个表中的这四个字段合并在一起,例如:
SELECT name, price, warranty_available, exclusive_offer FROM Products UNION ALL SELECT name, price, guarantee_available, exclusive_offer FROM Services;
让我们逐行检查上面的语法示例。
在使用 ALL 关键字时,Union 生成的合并集中并不删除重复行。这样,Access 便无需检查重复行的结果,从而可以显著提高查询的性能。如果满足下列任一条件,则应使用 ALL 关键字:
在本示例中,我们使用 ALL 关键字是因为我们既不期望会返回重复行,也没有略去它们的必要。
注释 联合查询输出中的字段名称从第一个 SELECT 子句中提取。因此,在本示例的查询输出中,来自字段“warranty_available”和“guarantee_available”的数据将被命名为“warranty_available”。
创建联合查询有两种基本方法:
在大多数情况下,您都应该先创建选择查询,然后再将它们合并为一个联合查询。在 Office Access 2007 中,“设计”视图提供了一种易用的创建选择查询的图形用户界面,您可以复制这些查询的 SQL 语句并将它们粘贴到联合查询中。
但是,如果您认为编写 SQL 语句得心应手,或者希望获得更多的 SQL 编写体验,则可能更倾向于直接在 SQL 视图中创建联合查询。
按照此方法,将先使用“设计”视图创建每个选择查询,然后使用 SQL 视图合并选择查询。
这会将该表添加到查询设计窗口。
注释 虽然您可以在选择查询中包括多个表或查询,但此过程假定每个选择查询只包括一个表中的数据。
选择字段时,请确保您在其他选择查询中以相同顺序添加了相同数目的字段。另外,请注意各个字段的数据类型,确保在要合并的其他查询中,处于相应位置的字段具有兼容的数据类型。
例如,如果第一个选择查询具有五个字段,且第一个字段包含“日期/时间”数据,请确保要合并的其他每个选择查询也具有五个字段,并且第一个字段同样包含“日期/时间”数据,依此类推。