codecamp

MS Access连接

数据库是允许彼此逻辑关系的数据表的集合。您可以使用关系,通过它们共有的字段来连接表。一个表可以是任意数量的关系的一部分,但是每个关系总是具有完全相同的两个表。在查询时,关系由Join表示。

什么是连接

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

以下是我们将在本章中讨论的两种基本类型的连接:

  • 内连接
  • 外连接

两者都可以很容易地从查询设计视图创建。

连接

现在让我们来了解内连接 -

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

外连接

现在让我们了解什么是外连接-

  • 外连接显示一个表中的所有行,并且只显示连接字段相等的另一个表中的行或记录。
  • 换句话说,外连接显示一个表中的所有行,而只显示另一个表中的相应行。
Outer Join

还有其他连接类型 -

左外连接和右外连接

现在让我们了解左外连接右外连接 -

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

现在让我们转到创建选项卡并从设计视图创建一个查询。选择tblProjects和tblTask​​s,并关闭“显示表”对话框,如下面的截图所示。

TblTasks

从tblProjects中添加ProjectName字段,从tblTask​​s表中添加TaskTitle,StartDate和DueDate。

Add Project Name

现在让我们来运行查询。

Project Details

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

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

  • 默认情况下,它在这两个表之间创建这两个字段之间的内连接,这就是如何将这些信息与这两个表相关联。

  • 它只向我们显示匹配,所以当我们运行此查询,在tblProjects中列出的很多其他项目不会出现作为我们在这个查询中设置的记录的一部分,这是因为这两个表如何通过内连接(这是默认的Join任何查询)连接在一起。

然而,如果你想改变关系,让我们说你想创建一个外连接,或者换句话说,显示来自tblProjects的所有项目,该表中的每个记录,以及来自tblTask​​s的所有任务 - 打开连接属性;我们可以简单地通过双击关系线来做到这一点。

Join Properties

Access将在“加入属性”对话框中显示左表格名称和右表格名称。

  • 左列名称和右列名称以及第一个单选按钮仅包含两个表中的连接字段相等的行,即内连接并且这是在创建关系时默认选择的,当在查询中创建连接时,但是您可以更改它。

  • 我们还有两个其他选项;我们可以包括来自tblProjects的所有记录,并且只包括来自tblTask​​s的那些记录,其中连接字段相等,这一个是左外连接。

  • 我们有第三个选项,包括来自tblTask​​s的所有记录,只包括来自tblProjects的那些记录,其中连接的字段是相等的,这一个是右外连接。

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

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

Other Steps

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

Arrow Pointing Results

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

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表中的Supervisor并按住鼠标按钮,并将其放在该复制表中的EmployeeID上面 - tblEmployees_1。然后,从该复制的表中添加名字和姓氏。

Create Self Join

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

Display Names

它显示员工的名称旁边的主管的名称。而且,这是如何在Microsoft Access中创建自连接。

MS Access汇总数据
MS Access查找重复项
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }