基于多个表创建查询

有时,构建和使用查询的过程是简单,只需从表中选择字段、 可能要应用一些条件,和即可查看结果。但是,如果更频繁地是如此,您需要的数据均匀分布在多个表中?幸运的是,您可以构建合并来自多个数据源信息的查询。本主题介绍了一些方案中提取数据从多个表中,并演示如何执行此操作。

您想做什么?

使用相关表中的数据来增强您的查询中的信息

通过使用第三个表及其关系连接两个表中的数据

查看两个相似表中的所有记录

使用相关表中的数据来增强您的查询中的信息

您可能必须在其基于一个表的查询为你提供所需的信息的情况下,但提取另一个表中的数据将有助于使查询结果更清晰、 更有用。例如,假设您有查询结果中的员工 Id 出现的列表。您意识到会更有用,以查看雇员姓名在结果中,但是雇员姓名位于另一个表中。若要获取雇员姓名以显示查询结果中,您需要在查询中包括两个表。

使用查询向导构建查询从主表和相关的表

  1. 确保表具有已定义的关系“关系”窗口中。

    方法

    1. 数据库工具选项卡上的显示/隐藏组中,单击关系

    2. “设计”选项卡上的“关系”组中,单击“所有关系”

    3. 确定应在已定义的关系的表。

      • 如果表在关系窗口中可见,请检查已定义关系。

        关系显示为一条直线连接两个表的公共字段。您可以双击以查看哪个表中的字段已连接的关系的关系线。

      • 如果在关系窗口中的表不可见,必须添加它们。

        设计选项卡上的显示/隐藏组中,单击表名称

        双击每个要显示的表,然后单击关闭

    4. 如果找不到两个表之间的关系,创建一个通过将字段从一个表拖至字段,在另一个表。创建表之间关系的字段必须具有相同的数据类型。

      注意: 您可以创建“自动编号”数据类型的字段是“数字”数据类型,如果该字段具有长整型字段大小的字段之间的关系。创建一对多关系时,通常会向此大小写。

      将显示“编辑关系”对话框。

    5. 单击创建以创建关系。

      创建关系时,可用选项的信息,请参阅创建、 编辑或删除关系一文。

    6. 关闭关系窗口

  2. 创建选项卡中的其他组中,单击查询向导

  3. 新建查询对话框中,单击简单查询向导,然后单击确定

  4. 表/查询组合框中,单击包含您在查询中包括所需的基本信息的表。

  5. 可用字段列表中,单击您想要包括在您的查询中的第一个字段,然后单击单个的右箭头按钮将该字段移动到所选字段列表。要在查询中包含该表格中执行同样的每个附加字段。这可能是您希望在查询输出中,返回的字段或您想要用来限制输出中的行,通过应用条件的字段。

  6. 表/查询组合框中,单击包含您要用来增强查询结果的相关的数据的表。

  7. 添加您想要使用增强查询结果到所选字段列表,然后单击下一步的字段。

  8. 在下您想详细信息或摘要查询?,单击详细信息摘要

    如果您不希望您的查询执行任何聚合函数 (SumAvgMinMax计数StDev、 或Var),选择明细数据查询。如果您希望您的查询执行聚合函数、 选择汇总查询。进行选择后,单击下一步

  9. 单击完成以查看结果。

使用 Northwind 示例数据库的示例

在下面的示例中,您可以使用查询向导构建查询,以显示订单列表、 每个订单的运费和处理每个订单的员工的名称。

注意: 此示例涉及修改 Northwind 示例数据库。您可能希望执行 Northwind 示例数据库的备份副本,然后按照本示例,使用该备份副本。

使用查询向导来生成查询

  1. 打开罗斯文示例数据库。关闭登录窗体。

  2. 创建选项卡中的其他组中,单击查询向导

  3. 新建查询对话框中,单击简单查询向导,然后单击确定

  4. 表/查询组合框中,单击表︰ 订单

  5. 可用字段列表中,双击订单 id将该字段移动到所选字段列表。双击运费将该字段移动到所选字段列表。

  6. 表/查询组合框中,单击表︰ 员工

  7. 可用字段列表中,双击名字以将该字段移动到所选字段列表。双击姓氏将该字段移动到所选字段列表。单击下一步

  8. 要创建的所有订单的列表,因为想要使用的明细数据查询。如果您汇总通过员工或执行其他一些聚合函数的运费,您可以使用摘要查询。(显示每个记录的每个字段) 的详细信息,请单击,然后单击下一步

  9. 单击完成以查看结果。

查询将返回订单的列表,都具有其运费和处理它的员工的名字和姓氏的名称。

返回页首

通过使用第三个表及其关系连接两个表中的数据

通常情况下,两个表中的数据是通过第三个相关的表。这通常是这种情况,因为在多对多关系相关前两个表之间的数据。通常,很好的数据库设计练习拆分到涉及三个表的两个-一对多关系的两个表之间的多对多关系。通过创建一个名为联接表或关系表中,为每个其他表中具有主键和外键的第三个表来执行此操作。然后在联接表中每个外的键和相应的主键的其他表之间创建-一对多关系。在这种情况下,您需要包含所有三个表查询,即使您想要从其中只有两个检索数据。

使用具有多对多关系的表生成的选择查询

  1. 在“创建”选项卡上的“其他”组中,单击“查询设计”。

    显示表对话框随即打开。

  2. 显示表对话框中,双击两个表包含您要包括在您的查询和也的联接表,链接它们,然后单击关闭的数据。

    所有三个表显示在查询设计工作区中,在相应字段上联接。

  3. 双击每个查询结果中您要使用的字段。然后,将在查询设计网格显示每个字段。

  4. 在查询设计网格中,使用条件行输入字段条件。若要使用但不显示查询结果中的字段的字段条件,请清除该字段的显示行中的复选框。

  5. 基于字段中,在查询设计网格中的值对结果进行排序单击该字段的排序行中的升序降序(具体取决于哪种方式所需的记录进行排序)。

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

    Access 会显示查询输出中数据表视图。

使用 Northwind 示例数据库的示例

注意: 此示例涉及修改 Northwind 示例数据库。您可能希望执行 Northwind 示例数据库的备份副本,然后按照本示例,使用的备份副本。

假设您有新的商机︰ 供应商里约热内卢中的发现了您的网站,并可能希望执行与您的业务。但是,他们只能运行在里约热内卢和圣保罗附近。他们提供您所代理的食物产品的每个类别。它们是业务规模很大,并且希望,您可以为其提供足够的潜在销售额,以使其值得您保证︰ 至少 R$ 20,000.00 每年的销售额 (有关 $9,300.00)。可以使用他们需要的市场提供它们?

在两个位置中找到的数据,您需要回答此问题︰ 客户表和订单明细表。这些表通过订单表相互链接。已定义表之间的关系。在订单表中,每个订单只能有一个客户,与客户表中的客户 id 字段上。在订单明细表中每条记录与只有一个订单中订单表中的订单 id 字段上。因此,给定的客户可以具有多个订单,其中每个具有多个订单的详细信息。

在本示例中,您将生成城市里约热内卢和圣保罗中显示,每年的总销售额的交叉表查询。

构建设计视图中的查询

  1. 打开罗斯文数据库。关闭登录窗体。

  2. 在“创建”选项卡上的“其他”组中,单击“查询设计”。

    显示显示表对话框。

  3. 显示表对话框中,双击客户ders,和订单详细信息,,然后单击关闭

    在查询设计工作区中显示所有三个表。

  4. 在客户表中,双击城市字段以将其添加到查询设计网格中。

  5. 在查询设计网格中,在城市列中的条件行中,键入In ("里约热内卢","圣保罗")。这会导致仅客户合一要包括在查询中以下两个城市在哪里这些记录。

  6. 在订单明细表中,双击发货日期和单价字段。

    字段将添加到查询设计网格中。

  7. 在查询设计网格中的发货日期列中,选择字段行。替换[发货日期]年︰ Format([ShippedDate],"yyyy")。这将创建字段别名,,它允许您在发货日期字段中使用刚刚值的年份部分。

  8. 在查询设计网格中的单价列中,选择字段行。替换销售额[单价] : [订单明细]。 [单价] * [数量]-[订单明细]。[单价] * [数量] * [折扣]。这将创建字段别名,销售,用于计算每个记录的销售额。

  9. 在“设计”选项卡的“查询类型”组中,单击“交叉表”。

    两个新行总计交叉表,将显示在查询设计网格中。

  10. 在查询设计网格中城市列中,单击交叉表行,然后单击行标题

    这会使城市值显示为行标题 (即,该查询返回的每个城市的一行)。

  11. 年份列中,单击交叉表行中,,然后单击列标题

    这会使的年值显示为列标题 (即,该查询返回一列为每年)。

  12. 销售额列中,单击交叉表行,然后单击

    这会使显示行和列的交叉处的销售值 (即,查询返回一个销售值对于每个城市和年份组合)。

  13. 销售额列中,单击总计行中,,然后单击总和

    这会导致查询对此列中的值求和。

    因为想要查看这些列的每个值,而不是汇总值,可以将其他两列的总计行的分组依据,为默认值。

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

现在,您可以在里约热内卢和圣保罗按年返回总销售额查询。

返回页首

查看两个相似表中的所有记录

有时,想要合并两个表都相同的结构,但其中一个位于另一个数据库中。请考虑以下情形。

假设您是使用学生数据分析。您正在着手数据共享您的学校和另一个学校之间的计划,以便两个学校可以改进课程计划。对于某些您要浏览的问题,很更好地查看所有记录两个学校一起,而不是每个学校单独记录。

您可以导入其他学校提供的数据的新表中在数据库中,但再到另一个学校的数据的任何更改将不会反映在您的数据库。更好的解决方案是链接到另一个学校的表,然后创建运行时合并数据的查询。您将能够作为单个设置,而不是执行两个分析和尝试解释它们,就像一个分析数据。

若要查看结构相同的两个表中的所有记录,您可以使用联合查询。

无法在设计视图中显示联合查询。通过使用SQL 视图对象选项卡中输入的 SQL 命令来生成联合查询。

使用两个表创建联合查询

  1. 在“创建”选项卡上的“其他”组中,单击“查询设计”。

    此时将打开一个新的查询设计网格,并显示显示表对话框。

  2. 显示表对话框中,单击关闭

  3. 设计选项卡的查询类型组中,单击联合

    查询从设计视图切换到 SQL 视图。此时,SQL 视图对象选项卡为空。

  4. 在 SQL 视图中,键入选择后, 跟从第一个字段的列表中查询所需的表。请括在方括号中,并以逗号分隔的字段名称。完成键入字段名称,请按 ENTER。将光标下移一行在 SQL 视图中移动。

  5. 键入FROM后面跟有名称的第一个查询中所需的表。按 ENTER。

  6. 如果您想要指定条件的第一个表中的某个字段的位置,键入后面跟有的字段名称、 比较运算符 (通常情况下,为等号 (=)) 和条件。您可以使用和关键字和相同的语法用于第一个条件; 到 WHERE 子句的末尾添加其他条件例如,在其中 [ClassLevel] ="100"和 [CreditHours] > 2。完指定条件时,按 ENTER。

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

  8. 类型选择后, 跟要在查询中的第二个表中字段的列表。您应包含此表中包含从第一个表,并以相同的顺序相同字段。请括在方括号中,并以逗号分隔的字段名称。完成键入字段名称,请按 ENTER。

  9. 键入FROM后, 跟要包括在查询中的第二个表的名称。按 ENTER。

  10. 如果需要,添加一个 WHERE 子句,此过程的步骤 6 中所述。

  11. 键入一个分号 (;),以指示您的查询的末尾。

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

    在数据表视图中显示结果。

返回页首

注释: 

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

  • 请在 此处 中查找本文的英文版本以便参考。你和 Microsoft 社区的其他成员可以使用 Community Translation Framework (CTF) 来改进本文。只需将鼠标悬停在文章中的句子上,然后在 CTF 小组件中单击“IMPROVE TRANSLATION”即可。 单击此处了解有关 CTF 的详细信息。 使用 CTF 即表示你同意服务条款

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

此信息是否有帮助?

谢谢您的反馈!

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

×