有时,仅当包含具有匹配数据的一个或多个字段的其他 Access 表中有相应记录时,可能才想查看某 Access 表中的记录。 例如,你可能希望查看至少处理了一个订单的员工的员工记录,以决定哪些员工有资格获得奖金。 或者,可能希望查看和某员工住在同个城市的客户的联系信息,从而安排员工亲自拜访客户。
若要比较两个 Access 表并查找匹配数据,可执行以下任一操作:
-
通过使用现有关系,或使用为查询创建的联接,创建每个表中联接内含相应信息的字段的查询。 此方法可提供最佳性能(查询返回结果的速度),但无法联接含有不同数据类型的字段。
-
通过将某字段用作另一字段的条件,创建比较字段的查询。 通常,将某字段用作另一字段的条件比使用联接速度慢,因为联接会在读取基础表前排除查询结果中的多行,条件会在读取之后应用到查询结果中。 但是,可将字段用作字段条件以比较含有不同数据类型的字段,这是使用联接无法实现的。
本文介绍如何比较两个表以识别匹配数据,并提供可用于示例过程的示例数据。
您要做什么?
使用联接比较两个表
若要使用联接比较两个表,可创建包含两个表的选择查询。 如果表之间包含相应数据的字段上尚无现成关系,需在要检查匹配项的字段上创建联接。 可创建任意数量的联接,但每对联接的字段必须是相同或兼容的数据类型。
假设你是大学的机构研究人员,希望了解数学系的最近课程更改如何影响学生成绩。 你对主修数学的学生的成绩特别感兴趣。 你已有两个表,一个存储学生专业数据,一个存储课程注册数据。 成绩数据存储在“课程注册”表中,学生专业数据存储在“学生专业”表中。 若要查看最近课程更改后,数学专业学生的成绩变化情况,需要在注册表中查看记录,其在专业表中有相应的记录。
准备示例数据
在此示例中,创建一个查询,该查询确定数学系的最近课程更改如何影响数学专业学生的成绩。 使用以下两个示例表:“学生专业”和“课程注册”。 将“学生专业”和“课程注册”这两个示例表添加到数据库。
Access 提供了多种将这些示例表添加到数据库的方法。 您可以手动输入数据,可以将每个表复制到电子表格程序中,然后将工作表导入 Access ,也可以将数据粘贴到文本编辑器(如记事本)中,然后从生成的文本文件导入数据。
本节中的步骤介绍如何在空白电子表格中手动输入数据以及如何将示例表复制到 Excel,然后将这些表导入 Access。
学生专业
学生 ID |
学年 |
专业 |
---|---|---|
123456789 |
2005 |
数学 |
223334444 |
2005 |
英语 |
987654321 |
2005 |
数学 |
135791357 |
2005 |
历史 |
147025836 |
2005 |
生物 |
707070707 |
2005 |
数学 |
123456789 |
2006 |
数学 |
223334444 |
2006 |
英语 |
987654321 |
2006 |
心理学 |
135791357 |
2006 |
ARTH |
147025836 |
2006 |
生物 |
707070707 |
2006 |
数学 |
课程注册
学生 ID |
学年 |
学期 |
课程 |
课程编号 |
成绩 |
---|---|---|---|---|---|
123456789 |
2005 |
3 |
数学 |
221 |
A |
123456789 |
2005 |
3 |
英语 |
101 |
B |
123456789 |
2006 |
1 |
数学 |
242 |
C |
123456789 |
2006 |
1 |
数学 |
224 |
C |
223334444 |
2005 |
3 |
英语 |
112 |
A |
223334444 |
2005 |
3 |
数学 |
120 |
C |
223334444 |
2006 |
1 |
POSC |
110 |
A |
223334444 |
2006 |
1 |
英语 |
201 |
B |
987654321 |
2005 |
3 |
数学 |
120 |
A |
987654321 |
2005 |
3 |
心理学 |
101 |
A |
987654321 |
2006 |
1 |
数学 |
221 |
B |
987654321 |
2006 |
1 |
数学 |
242 |
C |
135791357 |
2005 |
3 |
历史 |
102 |
A |
135791357 |
2005 |
3 |
ARTH |
112 |
A |
135791357 |
2006 |
1 |
数学 |
120 |
B |
135791357 |
2006 |
1 |
数学 |
141 |
C |
147025836 |
2005 |
3 |
生物 |
113 |
B |
147025836 |
2005 |
3 |
化学 |
113 |
B |
147025836 |
2006 |
1 |
数学 |
120 |
D |
147025836 |
2006 |
1 |
统计学 |
114 |
B |
707070707 |
2005 |
3 |
数学 |
221 |
B |
707070707 |
2005 |
3 |
统计学 |
114 |
A |
707070707 |
2006 |
1 |
数学 |
242 |
D |
707070707 |
2006 |
1 |
数学 |
224 |
C |
若要使用电子表格程序输入示例数据,可跳过以下节。
手动输入示例数据
-
打开新的或现有的数据库。
-
在“创建”选项卡上的“表”组中,单击“表”。
Access 将新的空白表添加到数据库。
注意: 如果打开新的空白数据库,无需执行此步骤,但每次需将表添加到数据库时均需此步骤。
-
双击标题行中的第一个单元格,然后在示例表中键入字段名称。
默认情况下,Access 使用文本“添加新字段”表示标题行中的空白字段,例如:
-
使用箭头键移到下一个空白标题单元格,然后键入第二个字段名称。 (也可双击新单元格。 )对每个字段名称重复此步骤。
-
在示例表中输入数据。
输入数据时,Access 会推断每个字段的数据类型。 每个字段均有特定的数据类型,如数字、文本或日期/时间。 设置数据类型有助于确保数据输入正确,还有助于防止错误,例如在计算中使用电话号码。 对于这些示例表,允许 Access 推断数据类型,但确保查看 Access 针对每个字段推断的数据类型。
-
输入数据后,单击“保存”或按 CTRL+S。
将显示“另存为”对话框。
-
在“表名称”框中,键入示例表的名称,然后单击“确定”。
使用每个示例表的名称(例如“学生专业”),因为本文的过程章节中的查询也使用这些名称。
输入示例数据后,即可比较两个表。
如果不想了解如何基于前一节中的表的示例数据创建工作表,请跳过以下节(创建示例工作表)。
创建示例工作表
基于工作表创建数据库表
-
在新的或现有的数据库中:
在“外部数据”选项卡的“导入”组中,单击“Excel”。
-或-
单击“更多”,然后从列表中选择电子表格程序。
随即出现“获取外部数据-项目名称电子表格”对话框。
-
单击“浏览”,查找和打开先前步骤中创建的电子表格文件,然后单击“确定”。
将启动导入电子表格向导。
默认情况下,此向导选择工作簿中的第一个工作表(若执行前一节的步骤,则为“学生专业”),此工作表中的数据出现在向导页面的下半部。
-
单击“下一步”。
-
在向导的下一页上,选择“第一行包含列标题”复选框,然后单击“下一步”。
-
在下一页上,可使用“字段选项”下的文本框和列表,更改字段名称和数据类型,或者在导入操作中删除字段。 对于本示例,无需更改任何内容。 单击“下一步”。
-
在下一页上,选择“无主键”选项,然后单击“下一步”。
-
默认情况下,Access 向新表应用工作表的名称。 接受“导入到表”框中的名称,然后单击“完成”。
-
在“保存导入步骤”页面,单击“关闭”完成向导。
-
重复步骤 1 到 7,直到从电子表格文件中的每个工作表创建表。
使用联接比较示例表并查找匹配记录
此时,可准备比较“课程注册”表和“学生专业”表。 因为未定义两个表之间的关系,需要在查询的相应字段间创建联接。 表有多个共用字段,需为每对共用字段创建一个联接:学生 ID、学年和课程(“课程注册”表)和专业(“学生专业”表)。 在此示例中,你只对数学专业学生感兴趣,因此还将使用字段条件来限制查询结果。
-
打开保存有示例表的数据库。
-
在“创建”选项卡上,单击“查询设计”。
-
双击包含要显示的记录的表(在本示例中为 “课堂注册 ”表),然后双击要与之进行比较的表(在本例中为 “学生专业” 表)。
-
将“学生 ID”字段从“课程注册”表拖动到“学生专业”表的“学生 ID”字段。 在设计网格中,两个表之间出现一条线,表示已创建联接。 双击此线,打开“联接属性”对话框。
-
查看“联接属性”对话框中的 3 个选项。 默认选择选项 1。 在某些情况下,需要将联接属性调整为包含某表中的额外行。 因为尝试仅查找匹配数据,所以将联接设置为选项 1。 单击“取消”,关闭“联接属性”对话框。
-
需要再创建两个联接。 创建这些联接的方法是将“学年”字段从“课程注册”表拖动到“学生专业”表的“学年”字段,然后将“课程”字段从“课程注册”表拖动到“学生专业”表中的“专业”字段。
-
在“课程注册”表中,双击星号 (*),将表的所有字段添加到查询设计网格。
注意: 使用星号添加所有字段时,设计网格中只显示一列。 出现的列具有表的名称,后跟句点 (.) 和星号 (*) 。 在此示例中,列名为 Class Enrollments.*。
-
在“学生专业”表中,双击“专业”字段,将其添加到网格。
-
在查询设计网格中,清除“专业”列的“显示”行中的复选框。
-
在“专业”列的“条件”行中,键入“数学”。
-
在“设计”选项卡上的“结果”组中,单击“运行”。
查询运行,仅显示数学专业学生的数学成绩。
将某字段用作条件比较两个表
有时,你可能希望基于具有匹配数据但数据类型不同的字段比较表。 例如,一个表中的字段可能是“数字”数据类型,你希望将此字段与其他表中的“文本”数据类型字段进行比较。 当数字以文本形式存储时(可能通过设计或其他原因,例如从其他程序导入数据),可能生成包含不同数据类型的相似数据的字段。 由于无法在包含不同数据类型的字段间创建联接,因此需要使用其他方法比较字段。 可通过将某字段用作另一字段的条件来比较两个数据类型不同的字段。
假设你是大学的机构研究人员,希望了解数学系的最近课程更改如何影响学生成绩。 你对主修数学的学生的成绩特别感兴趣。 已经有“学生专业”表和“课程注册”表。 成绩数据存储在“课程注册”表中,学生专业数据存储在“学生专业”表中。 若要查看数学专业学生的成绩变化情况,需要在注册表中查看记录,其在专业表中有相应的记录。 但是,要用于比较表的某字段和其对应字段的数据类型不同。
若要将字段用作条件比较两个表,可创建包含两个表的选择查询。 包含要显示的字段,并包含与要用作条件的字段对应的字段。 然后,创建条件以比较表。 可创建任意多个条件比较字段。
若要举例说明此方法,可使用前一节的示例表,但要将“学生专业”示例表的“学生 ID”字段的数据类型从数字更改为文本。 由于无法在数据类型不同的两个字段间创建联接,需要将一个字段用作另一个字段的条件来比较两个“学生 ID”字段。
更改“学生专业学生 ID”字段的数据类型
-
打开保存有示例表的数据库。
-
在“导航窗格”中,右键单击“学生专业”表,单击快捷菜单上的“设计视图”。
“设计视图”中将打开“学生专业”表。
-
在“数据类型”列中,将“学生 ID”的设置从“数字”更改为“文本”。
-
关闭“学生专业”表。 系统提示保存更改时,单击“是”。
使用字段条件比较示例表并查找匹配记录
以下过程介绍如何通过将“课程注册”中的字段用作“学生专业”中字段的条件来比较两个“学生 ID”字段。 通过使用“Like”关键字,可比较具有不同数据类型的字段。
-
在“创建”选项卡上的“其他”组中,单击“查询设计”。
-
双击“ 课堂注册”,然后双击“ 学生专业”。
-
将“学年”字段从“课程注册”表拖动到“学生专业”表的“学年”字段,然后将“课程”字段从“课程注册”表拖动到“学生专业”表中的“专业”字段。 由于这些字段的数据类型相同,可使用联接进行比较。 对于具有相同数据类型的字段比较,使用联接是首选方法。
-
双击“课程注册”表上的星号 (*),将表的所有字段添加到查询设计网格。
注意: 使用星号添加所有字段时,设计网格中只显示一列。 出现的列具有表的名称,后跟句点 (.) 和星号 (*) 。 在此示例中,列名为 Class Enrollments.*。
-
在“学生专业”表中,双击“学生 ID”字段,将其添加到网格。
-
在设计网格中,清除“学生 ID”列的“显示”行中的复选框。 在“学生 ID”列的“条件”行中,键入“Like [课程注册].[学生 ID]”。
-
在“学生专业”表中,双击“专业”字段,将其添加到网格。
-
在设计网格中,清除“专业”列的“显示”行中的复选框。 在“条件”行中,键入“数学”。
-
在“设计”选项卡上的“结果”组中,单击“运行”。
查询运行,仅显示数学专业学生的数学成绩。