MS Access - 联接



数据库是由多个数据表组成的集合,这些表之间存在逻辑关系。您可以使用关系通过它们共有的字段连接表。一个表可以属于任意数量的关系,但每个关系总是恰好包含两个表。在查询中,关系由联接表示。

什么是联接

联接指定如何组合数据库中来自两个或多个表中的记录。从概念上讲,联接与表关系非常相似。事实上,联接之于查询,如同关系之于表。

本章将讨论以下两种基本的联接类型:

  • 内部联接
  • 外部联接

这两种联接都可以轻松地通过查询设计视图创建。

内部联接

现在让我们了解内部联接

  • 最常见的联接类型是内部联接,它也是 Microsoft Access 中的默认联接类型。
  • 内部联接仅显示两个表中联接字段相等的那些行或记录。
  • 此联接类型查看那些公共字段及其包含的数据。它只显示匹配项。
Inner Join

外部联接

现在让我们了解外部联接

  • 外部联接显示一个表中的所有行,以及另一个表中联接字段相等的那些行或记录。
  • 换句话说,外部联接显示一个表中的所有行以及另一个表中对应的行。
Outer Join

还有其他联接类型:

左外部联接和右外部联接

现在让我们了解左外部联接右外部联接

  • 您可以选择将显示所有行的表。
  • 您可以创建一个左外部联接,它将包含第一个表中的所有行。
Left Join
  • 您可以创建一个右外部联接,它将包含第二个表中的所有行。
Right Join

现在让我们转到“创建”选项卡,并从设计视图创建一个查询。选择tblProjectstblTasks,然后关闭“显示表”对话框,如下图所示。

TblTasks

添加来自tblProjects表的ProjectName字段,以及来自tblTasks表的TaskTitle、StartDateDueDate字段。

Add Project Name

现在让我们运行查询。

Project Details

我们只显示了少数几个项目的记录。其中一些项目有很多与该项目相关的任务,这些信息通过ProjectID字段相关联。

  • 当我们在 Microsoft Access 中创建此查询时,Access 将使用我们创建的关系。

  • 默认情况下,它创建的是所谓的这两个字段之间的内部联接,这两个表之间的内部联接,这就是它如何将这两个表中的信息关联起来的方式。

  • 它只向我们显示匹配项,因此当我们运行此查询时,tblProjects中列出的许多其他项目不会显示为我们此查询记录集的一部分,这是因为这两个表是如何通过内部联接连接在一起的,而内部联接又是任何查询的默认联接。

但是,如果您想更改关系,假设您想创建一个外部联接,或者换句话说,显示tblProjects中的所有项目,该表中的每个记录,以及tblTasks中的所有任务 - 打开联接属性;我们可以通过双击关系线来简单地做到这一点。

Join Properties

Access 将在“联接属性”对话框中显示左表名和右表名。

  • 左列名和右列名,第一个单选按钮是只包含两个表中联接字段相等的那些行,这就是内部联接,这是在创建关系时,在查询中创建联接时默认选择的,但是,您可以更改它。

  • 我们还有另外两个选项;我们可以包含tblProjects中的所有记录,以及tblTasks中联接字段相等的那些记录,这是一个左外部联接。

  • 我们还有一个选项,包含tblTasks中的所有记录,以及tblProjects中联接字段相等的那些记录,这是一个右外部联接。

这些就是您可以轻松地从设计视图创建的不同类型的联接。让我们选择第二个选项,即左外部联接,然后单击确定

现在让我们看看其他步骤:

Other Steps

当您查看关系线时,您将看到一个指向tblTasksProjectID的小箭头。当您运行此查询时,您将看到以下结果。

Arrow Pointing Results

您可以看到它向我们显示了每个项目名称,无论它是否具有相关的任务。您还将看到一堆空字段。所有这些都将为空白,因为在tblTasks中没有相关信息,而这些字段来自那里。现在让我们再次转到设计视图并双击关系线。

Related Task

在“联接属性”对话框中,选择第三个选项,即右外部联接,然后单击确定

Other Steps

现在看看我们的关系线。您将看到一个小箭头现在指向tblProjects中的ProjectID。当您运行此查询时,您将看到以下结果。

Relationship Line

自联接

自联接是另一种类型的联接。自联接关联同一表中匹配的字段。例如,查看包含主管字段的员工表,该字段引用同一表中另一个字段(员工 ID)中存储的相同类型的编号。

Self Joins

如果我们想知道 Kaitlin Rasmussen 的主管是谁,我们将不得不获取该主管字段中存储的编号,并在同一表的员工 ID 字段中查找它,以便知道 Charity Hendricks 是主管。

此表不是关系数据库的理想结构,因为它没有规范化。

如果我们遇到要创建一个查询的情况,该查询只列出员工姓名及其主管的姓名,那么除非我们创建一个自联接,否则我们没有简单的查询方法。

要查看自联接,请创建一个包含以下字段的表并输入一些数据。

Create Table

在这里,我们想再次创建一个列表,其中包含员工的姓名,然后是主管的姓名。让我们从查询设计视图创建一个查询。

现在,添加tblEmployees表。

Add TblEmployees

关闭此对话框。

现在,添加员工的姓名。

Names of Employee

现在我们需要一种方法来创建此表与其自身之间的关系。为此,我们需要打开显示表对话框并再次添加 tblEmployees。

Show Table Dialog Box

我们在该查询视图中创建了同一表的另一个副本。现在,我们需要创建自联接。为此,请单击tblEmployees表中的主管,按住鼠标按钮,然后将其直接拖放到复制的表tblEmployees_1中的EmployeeID之上。然后,添加该复制表中的姓名。

Create Self Join

现在让我们运行您的查询,您将看到以下结果。

Display Names

它显示了员工的姓名以及他们主管的姓名。这就是您在 Microsoft Access 中创建自联接的方式。

广告