使用查询可以更轻松地查看、添加、删除或更改 Access 数据库中的数据。 使用查询的其他一些原因:
通过按特定条件 (条件筛选来快速查找特定的数据)
计算或汇总数据
自动执行数据管理任务,例如定期查看最新数据。
查询可帮助你查找和处理数据
在精心设计的数据库中,想要呈现在表单或报表中的数据通常位于多个表中。 查询可以从各种表中拉取信息并将其组合以显示在窗体或报表中。 查询可以是对数据库中数据结果的请求,也可以是对数据执行操作的请求,或两者兼而有之。 查询可以回答一个简单的问题、执行计算、合并不同表中的数据、添加、更改或删除数据库中的数据。 由于查询用途广泛,因此查询类型很多,您可以根据任务创建查询类型。
| 主要查询类型 | 用途 |
|---|---|
| 选择 | 用于从表中检索数据或进行计算。 |
| 动作 | 添加、更改或删除数据。 每项任务具有特定类型的动作查询。 |
创建选择查询
如果只想查看表中某些字段中的数据,或者同时查看多个表中的数据,或者可能只是根据特定条件查看数据,则选择查询类型将是您的选择。 有关详细信息,请参阅 创建简单的选择查询。
查看选定字段中的数据
例如,如果数据库中包含大量产品信息的表,并且你希望查看产品列表及其价格,下面介绍如何创建选择查询以仅返回产品名称和相应的价格:
- 打开数据库,然后在 Create 选项卡上,单击 Query Design。
- 在 “表 ”选项卡上,双击 “产品” 表。
- 在“产品”表中,假设您有“产品名称”和“标价”字段。 双击 “产品名称 ”和 “列出价格 ”,将这些字段添加到查询设计网格。
- 在 “查询设计 ”选项卡上,单击 “运行”。 查询将运行,并显示产品及其价格列表。
同时查看多个相关表中的数据
例如,如果您有一个销售食品的商店的数据库,并且您想要查看居住在特定城市的客户的订单。 假设有关订单的数据和有关客户的数据分别存储在两个名为“客户”和“订单”的表中。 如果每个表都有一个客户 ID 字段,该字段构成两个表之间一对多关系的基础。 可以使用以下过程创建一个查询来返回为特定城市(例如拉斯维加斯)的客户返回订单:
- 打开数据库。 在 “创建 ”选项卡的 “查询 ”组中,单击 “查询设计”。
- 在“ 表 ”选项卡上,双击“ 客户 和 订单”。
请注意, (称为联接) 的行,它连接“客户”表中的“ID”字段和“订单”表中的“客户 ID”字段。 此行显示两个表之间的关系。 - 在“客户”表中,双击 Company 和 City 将这些字段添加到查询设计网格。
- 在查询设计网格的“城市”列中,清除“显示”行中的检查框。
- 在“城市”列的“条件”行中,键入 Las Vegas。
如果清除“显示”检查框,则查询将无法在其结果中显示城市,并且如果在“条件”行中键入“拉斯维加斯”,则指定希望仅查看“城市”字段的值为拉斯维加斯的记录。 在这种情况下,查询仅返回位于拉斯维加斯的客户。 无需显示字段即可将其与条件一起使用。 - 在“订单”表中,双击“ 订单 ID ”和 “订单日期” ,将这些字段添加到查询设计网格的接下来两列。
- 在 “查询设计 ”选项卡的 “结果 ”组中,单击 “运行”。 查询将运行,然后显示拉斯维加斯客户的订单列表。
- 按 Ctrl+S 保存该查询。
创建参数查询
如果您经常需要运行特定查询的变体,请考虑使用参数查询。 运行参数查询时,查询会提示您输入字段值,然后使用您提供的值创建查询条件。
继续上一个示例,在该示例中学习如何创建为位于拉斯维加斯的客户返回订单的选择查询,可以修改选择查询,以便在每次运行查询时提示指定城市。 若要继续操作,请打开在上例中创建的数据库:
在导航窗格中,右键单击在上一部分) 中创建的名为 “按城市 (订单” 的查询,然后单击快捷菜单上的“ 设计视图 ”。
在查询设计网格的“城市”列的“条件”行中,删除拉斯维加斯,然后键入 [For what city?]。
字符串 [For what city?] 是参数提示。 方括号表示希望查询要求输入,在本例中,文本 (“ For what city?”) 是参数提示显示的问题。注意
句点 (.) 也没有感叹号 (!) 可用作参数提示符中的文本。
选中“城市”列的“显示”行中的检查框,以便查询结果显示城市。
在 “查询设计 ”选项卡的 “结果 ”组中,单击 “运行”。 该查询将提示您输入 City 的值。
键入“ New York”,然后按 Enter 键,查看客户在纽约的订单。
如果不知道可以指定哪些值,该怎么办? 可以使用通配符作为提示的一部分:在“开始”选项卡上的“视图”组中,单击“视图”,然后单击“设计视图”。
在查询设计网格的“城市”列的“条件”行中,键入 Like [For what city?]&“*”.
在此参数提示符中,Like 关键字 (keyword) 、与号 (&) 以及) 用引号括起来的星号 (* 允许用户键入字符组合(包括通配符)以返回各种结果。 例如,如果用户键入 *,则查询返回所有城市;如果用户键入 L,则查询返回以字母“L”开头的所有城市;如果用户键入 *s*,则查询返回包含字母“s”的所有城市。在 “查询设计 ”选项卡的“ 结果” 组中,单击 “运行”,然后在查询提示符处键入 “New”,然后按 Enter。
该查询将运行,然后显示纽约客户的订单。
指定参数数据类型
还可以指定参数应接受的数据类型。 你可以为任何参数设置数据类型,但为数字、货币或日期/时间数据设置数据类型尤为重要。 在指定参数应该接受的数据类型后,如果用户输入错误类型的数据(例如,应该输入货币,但输入了文本),则会看到更有帮助的错误消息。
如果将参数设置为接受文本数据,则输入的任何内容都将被解释为文本,并且不会显示任何错误消息。
要在查询中指定参数的数据类型,请使用以下过程:
- 在“设计”视图中打开查询后,在 “查询设计 ”选项卡的“ 显示/隐藏 ”组中,单击 “参数”。
- 在“查询参数”对话框中的“参数”列中,为您要为其指定数据类型的每个参数键入提示信息。 请确保每个参数都与您在查询设计网格的“条件”行中使用的提示信息相匹配。
- 在“数据类型”列中,选择每个参数的数据类型。
有关详细信息,请参阅 在运行查询时使用参数要求输入。
创建总计查询
数据表中的“总计”行非常有用,但对于更复杂的问题,则使用总计查询。 总计查询是一种选择查询,可用于对数据进行分组和汇总,例如何时要查看每个产品的总销售额。 在总计查询中,可以使用 Sum 函数 (聚合函数) 来查看每个产品的总销售额。
使用以下过程修改在上一个示例中创建的产品分类汇总查询,以便它按产品汇总产品分类汇总。
- 在 “开始 ”选项卡上,单击 “视图>设计视图”。
“产品分类汇总”查询将在设计视图中打开。 - 在 “查询设计 ”选项卡的“ 显示/隐藏 ”组中,单击 “总计”。
“ 总计” 行显示在查询设计网格中。
注意
尽管它们具有类似的名称,但设计网格中的 “总计 ”行和数据表中的“ 总计 ”行并不相同:
- 可以使用设计网格中的 “总计 ”行按字段值进行分组。
- 可以在总计查询的结果中添加数据表 总计 行。
- 在设计网格中使用 “总计 ”行时,必须为每个字段选择一个聚合函数。 如果您不想对字段执行计算,您可以按字段进行分组。
- 在设计网格第二列的“ 总计 ”行中,从下拉列表中选择“ 求和 ”。
- 在 “查询设计 ”选项卡的 “结果 ”组中,单击 “运行”。 查询运行,然后显示包含小计的产品列表。
- 按 Ctrl+S 保存该查询。 保持查询处于打开状态。
有关详细信息,请参阅 使用总计行在数据表中显示列总计。
根据数据进行计算
通常不会使用表来存储计算值(如分类汇总),即使它们基于同一数据库中的数据,因为如果计算值所基于的值发生更改,计算值可能会过时。 例如,您不会将某人的年龄存储在表格中,因为每年您都必须更新该值;而是存储此人的出生日期,然后使用查询来计算此人的年龄。
例如,如果您想销售某些产品的数据库。 此数据库有一个名为 Orders Details 的表,其中包含有关每个产品的价格和数量等字段中产品的信息。 可以使用查询来计算小计,即将每个产品的数量乘以该产品的单价,再将每个产品的数量乘以该产品的单价和折扣,然后从总单价中减去总折扣。 如果在上一示例中创建了示例数据库,请打开它并继续操作:
- 在“创建”选项卡上,单击“查询设计”。
- 在“ 表 ”选项卡上,双击 “订单详细信息”。
- 在“订单详细信息”表中,双击“ 产品 ID ”以将此字段添加到查询设计网格的第一列。
- 在网格的第二列中,右键单击 “字段 ”行,然后单击快捷菜单上的“ 缩放 ”。
- 在 “缩放 ”框中,键入或粘贴以下内容: 小计: ([数量]*[单价]) - ([数量]*[单价]*[折扣])
- 单击“确定”。
- 在 “查询设计 ”选项卡上,单击 “运行”。 将运行查询,然后显示每个订单的产品和小计列表。
- 按 CTRL+S 保存查询,然后将查询命名 为“Product Subtotals”。
有关详细信息,请参阅 使用总计行在数据表中显示列总计。
显示汇总数据或聚合数据
当您使用表来记录交易或存储定期出现的数值数据时,能够以聚合方式查看该数据(例如总和或平均值)非常有用。 在 Access 中,可以向数据表添加“总计”行。 总计行是数据表底部的一行,可以显示汇总或其他聚合值。
- 运行之前创建的产品分类汇总查询,并将结果保持在数据表视图中打开状态。
- 在“开始”选项卡上,单击“汇总”。 数据表底部将出现一个新行,第一列中带有“ 总计 ”一词。
- 单击数据表最后一行中名为“ 总计”的单元格。
- 单击箭头以查看可用的聚合函数。 因为列包含文本数据,所以只有两个选项:“ 无 ”和 “计数”。
- 选择 “计数”。 单元格的内容将从 “总计 ”更改为列值计数。
- 单击第二列) (的相邻单元格。 请注意,单元格中将显示一个箭头。
- 单击箭头,然后单击 “求和”。 该字段显示列值的总和。
- 在“数据表”视图中保持查询打开状态。
创建交叉表查询
现在假设你想要查看产品分类汇总,但还想按月聚合,以便每一行显示产品的分类汇总,每列显示一个月的产品小计。 要显示产品的分类汇总和一个月的产品分类汇总,请使用交叉表查询。
可以再次修改产品分类汇总查询,以便查询返回产品分类汇总行和每月分类汇总列。
- 在“开始”选项卡上的“视图”组中,单击“视图”,然后单击“设计视图”。
- 在 “查询设置 ”组中,单击 “添加表”。
- 双击 “订单”,然后单击“ 关闭”。
- 在 “查询设计 ”选项卡的 “查询类型 ”组中,单击 “交叉表”。 在设计网格中,显示“ 显示 ”行,显示“ 交叉表 ”行。
- 在设计网格的第三列中,右键单击“ 域” 行,然后单击快捷菜单上的“ 缩放 ”。 “ 缩放” 框将打开。
- 在 “缩放” 框中,键入或粘贴以下内容: Month: “Month ” & DatePart (“m”, [Order Date])
- 单击“确定”。
- 在 “交叉表 ”行中,从下拉列表中选择以下值:第一列的 “行标题 ”、第二列的 “值 ”和第三列的 “列标题 ”。
- 在 “查询设计 ”选项卡的 “结果 ”组中,单击 “运行”。 将运行查询,然后显示按月份汇总的产品分类汇总。
- 按 Ctrl+S 保存该查询。
有关交叉表查询的详细信息,请参阅 使用交叉表查询使摘要数据更易于阅读。
创建生成表查询
可以使用生成表查询从存储在其他表中的数据创建新表。
例如,假设你希望将芝加哥订单的数据发送给使用 Access 准备报表的芝加哥业务合作伙伴。 您希望将发送的数据限制为特定于芝加哥订单的数据,而不是发送所有订单数据。
您可以生成包含芝加哥订单数据的选择查询,然后使用该选择查询通过以下过程创建新表:
打开上一个示例中的示例数据库。
要运行生成表查询,可能需要启用数据库内容。注意
如果在功能区下方看到有关启用数据库的消息,请单击 **启用内容。** 如果数据库已位于受信任的位置,将看不到消息栏。
在 “创建 ”选项卡的 “查询 ”组中,单击 “查询设计”。
双击 “订单详细信息 ”和 “订单”。
在“ 订单” 表中,双击“ 客户 ID ”和 “发货城市” ,将这些字段添加到设计网格。
在 “订单详细信息 ”表中,双击“ 订单 ID”、“ 产品 ID”、“ 数量”、“ 单价”和“ 折扣 ”,将这些字段添加到设计网格。
在设计网格的 “船舶城市 ”列中,清除“ 显示 ”行中的框。 在“ 条件” 行中,键入 “Chicago” () 包含单引号。 在使用查询结果创建表之前,请先验证查询结果。
在 “查询设计 ”选项卡的 “结果 ”组中,单击 “运行”。
按 Ctrl + S 保存查询。
在 “查询名称 ”框中,键入 Chicago Orders Query,然后单击 “确定”。
在“开始”选项卡上的“视图”组中,单击“视图”,然后单击“设计视图”。
在 “查询设计 ”选项卡的 “查询类型 ”组中,单击 “创建表”。
在“ 制作表格 ”对话框的 “表格名称 ”框中,键入 Chicago Orders,然后单击“ 确定”。
在 “查询设计 ”选项卡的 “结果 ”组中,单击 “运行”。
在确认对话框中,单击 是,然后看到显示在导航窗格中的新表。
注意
如果已有与指定名称相同的表,Access 会在运行查询前删除该表。
有关使用生成表查询的详细信息,请参阅 创建生成表查询。
创建追加查询
可以使用追加查询从一个或多个表中检索数据,并将该数据添加到另一个表中。
例如,假设您创建了一个表与芝加哥业务伙伴共享,但您意识到该同事还与密尔沃基地区的客户合作。 在与同事共享表之前,您需要先将包含密尔沃基地区数据的行添加到表中。 可以通过使用以下过程将密尔沃基地区数据添加到“芝加哥订单”表中:
- 在“设计”视图中打开之前创建的名为“Chicago Orders Query”的查询。
- 在 “查询设计 ”选项卡的 “查询类型 ”组中,单击 “追加”。 “ 追加 ”对话框随即打开。
- 在 “追加 ”对话框中,单击 “表名称 ”框中的箭头,从下拉列表中选择“ Chicago Orders ”,然后单击“ 确定”。
- 在设计网格中,在“船舶城市”列的 “条件 ”行中,删除“Chicago”,然后键入 “Milwaukee”。
- 在“ 追加到 ”行中,为每列选择相应字段。
在此示例中, “追加到 ”行值应与 字段 行值匹配,但这并不是追加查询正常工作所必需的。 - 在 “查询设计 ”选项卡的 “结果 ”组中,单击 “运行”。
注意
在运行返回大量数据的查询时,可能会收到错误消息,指示您将无法撤消查询。 请尝试将内存段限制增加到 3MB 以允许完成查询。
有关追加查询的详细信息,请参阅使用追加查询将记录添加到表。
创建更新查询
可以使用更新查询更改表中的数据,并使用更新查询输入条件来指定应更新哪些行。 更新查询为您提供了在执行更新之前查看更新的数据的机会。
重要
操作查询无法撤消。 应考虑备份将使用更新查询更新的任何表。
在上面的示例中,您已向 Chicago Orders 表追加了行。 在 Chicago Orders 表中,“产品 ID”字段显示数字“产品 ID”。 要使数据在报告中更有用,可以使用以下过程将产品 ID 替换为产品名称:
在“设计”视图中打开“Chicago Orders”表。
在“产品 ID”行中,将“数据类型”从 “数字 ”更改为 “文本”。
保存并关闭“Chicago Orders”表。
在 “创建 ”选项卡的 “查询 ”组中,单击 “查询设计”。
双击 Chicago Orders and Products。
在 “查询设计 ”选项卡的 “查询类型 ”组中,单击 “更新”。
在设计网格中, “排序” 和 “显示 ”行将消失,将显示“ 更新到 ”行。
在 “Chicago Orders” 表中,双击 “产品 ID ”以将此字段添加到设计网格。
在设计网格中,在“产品 ID”列的“更新到”行中,键入或粘贴以下内容:[Products].[产品名称]
提示
可以使用更新查询删除字段值,方法是使用空字符串 (“ ”) 或“ 更新到 ”行中的 NULL。
在 “条件” 行中,键入或粘贴以下内容: [产品 ID] 如 ([产品].[ID])
可以通过在数据表视图中查看查询来查看更新查询将更改哪些值。
在 “设计 ”选项卡上,单击 “查看>数据表视图”。 该查询返回将更新的产品 ID 的列表。
在 “查询设计 ”选项卡上,单击 “运行”。
打开“芝加哥订单”表时,将看到“产品 ID”字段中的数值已替换为“产品”表中的产品名称。
有关更新查询的详细信息,请参阅创建和运行更新查询。
创建删除查询
可以使用删除查询从表中删除数据,并且可以使用删除查询输入条件来指定应删除哪些行。 删除查询让您有机会在执行删除之前查看将删除的行。
例如,假设当您准备将上一个示例中的“芝加哥订单”表发送给您的芝加哥业务伙伴时,您注意到某些行包含许多空字段。 你决定在发送表格之前删除这些行。 只需打开表并手动删除行,但如果要删除许多行,并且对于应该删除哪些行有明确的条件,那么您可能会发现使用删除查询很有帮助。
可以使用查询删除 Chicago Orders 表中没有订单 ID 值的行,方法是使用以下过程:
- 在“创建”选项卡上,单击“查询设计”。
- 双击 Chicago Orders。
- 在 “查询设计 ”选项卡的“ 查询类型 ”组中,单击 “删除”。 在设计网格中, “排序” 和 “显示 ”行将消失,将显示“ 删除 ”行。
- 在 “Chicago Orders” 表中,双击“ 订单 ID” 将其添加到网格。
- 在设计网格中,在“订单 ID”列的 “条件 ”行中键入 Is Null。
- 在 “查询设计 ”选项卡的 “结果 ”组中,单击 “运行”。
有关删除查询的详细信息,请参阅 创建和运行删除查询。