联接表和查询

重要:  本文是由机器翻译的,请参阅免责声明。请在 此处 中查找本文的英文版本以便参考。

在 Access 查询中包含多个数据源,您将使用联接来限制您想要查看,基于如何彼此相关的数据源的记录。您还使用联接合并两个数据源的记录,使记录源中的每个对成为查询结果中的一条记录。

本文讨论各种类型的联接并演示如何在查询中使用它们。默认情况下,如果您在查询中使用的两个数据源之间已存在关系,会自动创建联接。如果存在清楚地相互对应的域,也会创建联接。您可以删除自动创建的联接。本文提供了有关表关系,包括如何创建一个基本信息。

注意: 联接表,,也可以加入都相同的方式,您可以加入查询。

本文内容

概述

显示在两个联接表中存在公用值的行

显示一个表中的所有行和另一个表中的对应行

显示两个表中的所有行,并将它们加入存在公用值的位置

交叉联接

联接表根据字段值的不等运算符

删除联接

概述

数据库是承担逻辑之间的相互关系的数据的表的集合。您可以使用关系连接通过它们共有的字段的表。表可以是任意数量的关系的一部分,但每个关系始终具有两个表。在查询中,由联接表示关系。

将表添加到查询时, Access将创建基于已定义表之间的关系的联接。可以手动在查询中,创建联接,即使它们不表示已定义的关系。如果您使用其他查询 (而不是或除了表) 作为数据源的查询,您可以创建之间的源查询,以及这些查询和用作数据源的任何表之间的联接。

联接行为类似查询条件,因为它们建立的数据必须匹配要包括在查询操作的规则。与条件,不同联接还指定,将在记录集中成一行组合的每对满足联接条件的行。

有四种基本类型的联接: 内部联接、 外部联接、 交叉联接和不等联接。本文介绍了每种类型的联接,您可以使用,为什么您使用的每种类型,以及如何创建联接。

返回页首

显示在两个联接表中存在公用值的行

如果要仅显示在联接的字段中具有匹配值的行,请使用内部联接。Access 会自动创建内部联接。

内部联接是联接的最常见类型。他们告诉查询该行从其中一个联接表对应于在其他表中,根据联接字段中的数据行。使用内部联接的查询运行时,将在查询操作包括仅在两个联接表中存在公用值的行。

如何使用内部联接?

在大多数情况下,不需要执行任何操作即可使用内部联接。如果您添加到查询中的表已具有关系,则当您添加这些表时,Access 会在每对相关表之间自动创建内部联接。如果实施了引用完整性,Access 还在联接线上为一对多关系中的“一”方表显示“1”,为“多”方表显示无限大符号 ()。

即使尚未创建关系,Access 将自动创建内部联接如果向查询添加两个表和每个这些表有一个具有相同或兼容的数据类型和一个联接字段是主键。因为没有实施参照完整性,不会在此例中,显示"一"和"多"符号。

如果您将查询添加到您的查询,并且尚未创建这些查询之间的关系,Access 不会自动创建这些查询之间或查询和表之间的内部联接。通常情况下,您应创建其自己。您可以通过将字段从一个数据源拖至字段,在另一个数据源创建内部联接。Access 将显示两个字段以显示已创建了联接之间的线条。

内部联接的 SQL 语法

内部联接是在 SQL 的 FROM 子句中指定的,如下所示:

table1内部联接table2table1上。field1 比较 table2field2

INNER JOIN 操作包含以下部分:

部分

说明

table1, table2

对其中的记录进行组合的表的名称。

field1, field2

要联接的字段的名称。如果它们不是数值,则字段必须属于相同的数据类型,并且包含相同种类的数据,但它们不必有相同的名称。

比较

任何关系比较运算符:“=”、“<”、“>”、“<=”、“>=”或“<>”。

有关内部联接语法的详细信息,请参阅主题INNER JOIN 操作

返回页首

显示一个表中的所有行和另一个表中的对应行

外部联接告诉查询: 尽管某些联接的两面上行完全对应,查询应包括所有行从一个表,也联接的两面具有相同值的其他表中的这些行。

外部联接可以为左外部联接,也可以为右外部联接。在左外部联接中,对于 SQL 语句 FROM 子句中的第一个表,查询包括所有行;对于另一个表,则只包括两个表的联接字段值彼此相同的行。在右外部联接中,对于 SQL 语句 FROM 子句中的第二个表,查询包括所有行;对于另一个表,则只包括两个表的联接字段值彼此相同的行。

注意: 您可以轻松地辨别哪个表是左的表或右在给定联接表通过双击联接,然后在联接属性对话框中进行查看。您可以切换到 SQL 视图,然后检查 FROM 子句。

由于外部联接一方中的某些行可能在另一个表中没有对应行,在行不对应时,从另一个表得到的查询结果中返回的某些字段将为空。

如何使用外部联接?

您可以通过修改现有内部联接来创建外部联接。如果不存在内部联接,您可以创建一个,然后将其更改为外部联接。

将内部联接更改为外部联接

  1. 在查询设计视图中,双击要更改的联接。

    将显示“联接属性”对话框。

  2. 联接属性对话框中,注意选项2旁边列出的选项,和选项3

  3. 单击要使用的选项,然后单击“确定”。

  4. Access 显示联接,并显示一个箭头,该箭头从查询将包括所有行的数据源指向查询将只包括满足联接条件的行的数据源。

二义性的外部联接

如果您创建包含 LEFT JOIN 和内部联接的查询,Access 可能不能确定哪个联接要先执行的操作。结果是根据左的联接或内部联接首先执行的不同,因为 Access 将显示一条错误消息:

若要更正此错误,您必须修改查询以便明确要先执行哪个联接。

外部联接的 SQL 语法

外部联接是在 SQL 的 FROM 子句中指定的,如下所示:

通过在table1中 [左 |右] 加入table2
table1.field1 比较 table2.field2

LEFT JOIN 和 RIGHT JOIN 操作包含以下部分:

部分

说明

table1, table2

对其中的记录进行组合的表的名称。

field1, field2

要联接的字段的名称。这些字段必须属于相同的数据类型,并且包含相同种类的数据,但它们不需要有相同的名称

比较

任何关系比较运算符:“=”、“<”、“>”、“<=”、“>=”或“<>”。

有关外部联接语法的详细信息,请参阅主题LEFT JOIN、 RIGHT JOIN 操作

返回页首

显示两个表中的所有行,并将它们加入存在公用值的位置

当您想要显示两个表中的所有行,并将它们基于常见值加入时,您可以使用完全外部联接。Access 不显式支持完全外部联接,但您可以通过使用联合查询来实现相同的效果。以下过程介绍如何执行此操作,但如果您希望有关联合查询的详细信息,请参阅另请参阅部分。

使用联合查询执行完全外部联接:

  1. 在要用于完全外部联接的字段上创建一个具有左外部联接的查询。

  2. 在“开始”选项卡上的“视图”组中,单击“视图”,然后单击“SQL 视图”。

  3. 按 CTRL + C 复制 SQL 代码。

  4. 删除 FROM 子句末尾的分号,然后按 ENTER。

  5. 键入UNION,然后再按 ENTER。

    注意: 在使用联合查询执行完全外部联接时,请勿使用 ALL 关键字。

  6. 按 CTRL + V 粘贴您在步骤 3 中复制的 SQL 代码。

  7. 在粘贴的代码中,将 LEFT JOIN 更改为 RIGHT JOIN

  8. 删除的分号末尾的第二个 FROM 子句,然后按 ENTER。

  9. 添加一个 WHERE 子句,将 FROM 子句中列出的第一个表(左表)中的联接字段值更改为 NULL。

    例如,如果 FROM 子句为:

    FROM Products RIGHT JOIN [Order Details] 
    ON Products.ID = [Order Details].[Product ID]

    请添加以下 WHERE 子句:

    WHERE Products.ID IS NULL

  10. 在 WHERE 子句的末尾键入一个分号 (;),以指示联合查询已达末尾。

  11. 在“设计”选项卡上的“结果”组中,单击“运行”。

交叉联接

交叉联接的器不同内部和外部联接,因为它们不明确表示Access中。交叉联接,在一个表中的每一行合并得到称为叉积或笛卡尔积的另一个表中每一行。任何次运行查询时包含显式不联接的表的叉积是结果。交叉联接通常无意形成的但它们可能非常有用的情况下。

为什么使用交叉联接?

如果您想要查看每种可能的两个表或查询之间的行组合,请使用交叉联接。例如,假设您的企业有精美绝伦的年份,并且您正考虑供您的客户折扣。您可以构建求和每个客户购买的查询,创建具有多个可能的折扣百分比的小表格并合并执行交叉联接的另一个查询中的两个。您最终的查询显示一组假设折扣的每个客户。

如何使用交叉联接?

交叉联接会产生任何时候,您在查询中包括表或查询并不创建至少一个显式联接的每个表或查询。Access 会将每个表或查询,不明确联接到其他表或查询结果中每隔一行中的每一行组合。请考虑前面的段落中的折扣方案。假设您有 91 个客户,并且您想要查看五个可能的折扣百分比。您的交叉联接生成 455 行 (91 与 5 的产品)。

您可能想象,无意形成的交叉联接可以创建查询结果中的大量的行。此外,这些结果是通常没有意义,因为如果实际上不打算合并与每隔一行的每一行,大多数合并结果中显示的行不会有意义。最后,使用无意形成的交叉联接的查询可能需要很长时间运行。

查询设计视图中的无意形成的交叉联接
无意形成的交叉联接查询设计视图中。

1.带圆圈的字段应相互联接。

无意形成的叉积
返回由无意形成的交叉联接上方的叉积。

1.注意非常大的记录数。

更正后的查询结果
创建正确联接后的结果。

1.注意的记录数是更小。

返回页首

联接表根据字段值的不等运算符

联接不一定基于联接字段的等价性。联接可以基于任何比较运算符,例如大于 (>)、小于 (<) 或不等于 (<>)。不基于等价的联接称为不等联接。

如果想要将基于不等字段值的两个数据源的行合并,可以使用不等联接。通常,不等联接基于大于 (>)、小于 (<)、大于或等于 (>=) 或小于等于 (<=) 比较运算符。基于不等于 (<>) 运算符的不等联接可以返回与交叉联接几乎一样多的行,且结果可能很难解释。

如何使用不等联接?

在设计视图中不支持不等联接。如果您想要使用它们,必须使用 SQL 视图来执行此操作。但是,在设计视图中创建联接,切换到 SQL 视图,找到等于 (=) 比较运算符,更改要使用的它的运算符。执行此操作后,您可以只打开查询设计视图中再次如果您第一次更改比较运算符回等于 (=) 在 SQL 视图中。

删除联接

如果 Access 自动创建了您不需要的链接,或者您错误地创建了一个联接 (例如具有不同数据类型的两个字段之间的联接), 可以将其删除。

  1. 在查询设计网格中,单击要删除的联接。

  2. 删除

  • 在查询设计网格中,右键单击要删除的联接,然后单击删除

返回页首

注意: 机器翻译免责声明:本文是由无人工介入的计算机系统翻译的。Microsoft 提供机器翻译是为了帮助非英语国家/地区用户方便阅读有关 Microsoft 产品、服务和技术的内容。由于机器翻译的原因,本文可能包含词汇、语法或文法方面的错误。

另请参阅

将记录添加到表中使用追加查询

合并多个结果使用联合查询选择查询

创建基于多个表的查询

创建、 编辑或删除关系

扩展你的技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×