查询简介

Access > Access 基础知识

 

查询简介

blueup_CLV全部显示

bluedrop_CLV全部隐藏

如果要查看、添加、更改或删除数据库中的数据,请考虑使用查询。

使用查询可以回答有关数据的特定问题,而这些问题通过直接查看表数据很难解决。您可以使用查询筛选数据、执行数据计算和汇总数据。您还可以使用查询自动执行许多数据管理任务,并在提交数据更改之前查看这些更改。

 注释    聚合查询函数(如 SumCount)在 Web 查询中不可用。

使用查询更加轻松地完成许多数据库任务

本文内容


hrefIcon_ZA10069439 概述

hrefIcon_ZA10069439 查看表中的数据子集

hrefIcon_ZA10069439 同时查看多个表中的数据

hrefIcon_ZA10069439 使用参数查询询问问题变体

hrefIcon_ZA10069439 根据数据进行计算

hrefIcon_ZA10069439 查看汇总或聚合数据

hrefIcon_ZA10069439 使用其他表中的数据创建新表

hrefIcon_ZA10069439 将其他表中的数据添加到一个表

hrefIcon_ZA10069439 自动更改数据

hrefIcon_ZA10069439 自动删除数据


概述

查询是对数据结果、数据操作或者这两者的请求。可以使用查询回答简单问题、执行计算、合并不同表中的数据,甚至添加、更改或删除表数据。用于从表中检索数据或进行计算的查询称为选择查询。用于添加、更改或删除数据的查询称为操作查询。

本文提供了有关查询的基本信息以及不同类型查询的示例。有关每个类型的查询的详细信息,请搜索“帮助”,或单击本文“另请参阅”部分中的链接。

您还可以使用查询为窗体或报表提供数据。在设计良好的数据库中,要使用窗体或报表显示的数据通常位于多个不同的表中。通过使用查询,可以在设计窗体或报表之前组合要使用的数据。

有关使用查询为窗体或报表提供数据的详细信息,请参阅“另请参阅”部分中的链接或搜索“帮助”。

打开现有查询

如果不熟悉导航窗格,那么可能不知道如何打开已经存在的查询。导航窗格是一种功能,它取代了 Access 2007 之前的版本中的“数据库窗口”。可以在屏幕左侧看到导航窗格。

若要打开任何数据库对象,包括查询,可在导航窗格中双击该对象。

使用罗斯文数据库演练示例

 注释    本文中的示例使用了根据罗斯文 2010 数据库模板创建的数据库。

1.单击“文件”选项卡,然后单击“新建”
2.在中间窗格中的“可用模板”下,单击“样本模板”,然后单击“罗斯文”
3.在右窗格中,查看“文件名”框中的数据库文件名称,然后任意更改该名称。也可以单击文件夹图标,通过浏览找到其他文件位置。
4.单击“创建”
5.按照“罗斯文贸易”页(在“启动屏幕”对象选项卡上)上的说明打开数据库,然后关闭“登录对话框”窗口。

TopPageIcon_CLV 返回页首

查看表中的数据子集

有时您可能希望查看表中的所有数据,但有时您可能只希望查看某些字段中的数据,或者只希望在某些字段满足某些条件时查看数据。为了查看表中的某些数据,可使用选择查询。

假设您想要查看产品及其价格的列表。按照下列步骤,可以创建能够返回产品和价格信息的查询:

1.打开先前使用这些步骤设置的罗斯文数据库。
2.“创建”选项卡上的“宏和代码”组中,单击“查询设计”
3.“显示表”对话框的“表”选项卡上,双击“产品”
4.关闭“显示表”对话框。
5.在“产品”表中,双击“产品名称”“列出价格”将这些字段添加到查询设计网格 (设计网格:在查询设计视图或“高级筛选/排序”窗口中设计查询或筛选时所用的网格。对于查询,该网格以前称为“QBE 网格”。)中。
6.“设计”选项卡上的“结果”组中,单击“运行”

该查询将运行,然后显示产品及其价格的列表。

TopPageIcon_CLV 返回页首

同时查看多个表中的数据

在设计良好的数据库中,各个表之间具有逻辑关系 (关系:在两个表的公共字段(列)之间所建立的联系。关系可以为一对一、一对多、多对多。)。这些关系基于这些表中共同具有的字段。如果要查看相关表中的数据,请使用选择查询。

假设您要查看居住于特定城市的客户的订单。有关订单和客户的数据存储于同一数据库的两个表中。每个表都包含“客户 ID”字段,该字段构成这两个表之间的一对多关系 (一对多关系:两个表之间的一种关系,在这种关系中主表中每条记录的主键值都与相关表中多条记录的匹配字段(一个或多个)中的值对应。)的基础。按照下列步骤,可以创建查询以便返回特定城市(例如,天津)中客户的订单:

1.打开先前使用这些步骤设置的罗斯文数据库。
2.“创建”选项卡上的“宏和代码”组中,单击“查询设计”
3.“显示表”对话框的“表”选项卡上,双击“客户”“订单”
4.关闭“显示表”对话框。

请注意将“客户”表中的“ID”字段与“订单”表中的“客户 ID”字段连接起来的连线,它称为联接。该连线显示了两个表之间的关系。

5.在“客户”表中,双击“公司”“城市”,将这些字段添加到查询设计网格中。
6.在查询设计网格的“城市”列中,清除“显示”行中的复选框。
7.“城市”列的“条件”行中,键入天津

清除“显示”复选框可防止查询在其结果中显示城市,而在“条件”行中键入天津可指定您只想查看“城市”字段值为“天津”的记录。在此情况下,该查询只返回位于天津的客户,即三川实业有限公司和森通。

请注意,您不必显示某个字段就可以在条件中使用它。

8.在“订单”表中,双击“订单 ID”“订单日期”以便将这些字段添加到查询设计网格的后面两列中。
9.“设计”选项卡上的“结果”组中,单击“运行”

该查询将运行,然后显示天津的客户的订单列表。

10.按 Ctrl+S 可保存查询。

“另存为”对话框随即出现。

11.“查询名称”框中,键入按城市显示订单,然后单击“确定”

TopPageIcon_CLV 返回页首

使用参数查询询问问题变体

有时,您可能希望运行与现有查询略有差别的查询。您可以更改原来的查询以使用新条件,但是如果您经常希望运行特定查询的变体,请考虑使用参数查询。在运行参数查询时,查询将提示您提供字段值,然后使用您所提供的值创建查询条件。

上一示例中,您已创建了一个返回位于天津的客户的订单的查询。您可以通过下列步骤修改该查询,以便在您每次运行该查询时都提示您指定城市:

1.打开先前使用这些步骤设置的罗斯文数据库。
2.单击“百叶窗”以显示导航窗格。

 注释    如果已显示导航窗格,则不必执行该步骤。

3.在导航窗格中,右键单击名为“按城市显示订单”(在上一部分中创建)的查询,然后单击快捷菜单上的“设计视图”
4.在查询设计网格的“城市”列的“条件”行中,删除天津,然后键入 [请指定城市]

字符串 [请指定城市] 是参数提示。方括号表示您希望查询要求用户输入参数,方括号中的文本(本例中是请指定城市)是参数提示所显示的问题。

 注释    句号 (.) 和叹号 (!) 都不能用作参数提示信息中的文本。

5.选中“城市”列的“显示”行中的复选框,以使查询结果显示城市。
6.“设计”选项卡上的“结果”组中,单击“运行”

查询将提示您输入“城市”值。

7.键入深圳,然后按 Enter。

该查询将运行,然后显示深圳客户的订单。

但是,如果您不知道可以指定哪些值,该怎么办?为了使参数更加灵活,可以将通配符作为提示信息的一部分:

8.“开始”选项卡上的“视图”组中,单击“视图”,然后单击“设计视图”
9.在查询设计网格的“城市”列的“条件”行中,键入 Like [请指定城市]&"*"

在此参数提示信息中,Like 关键字、“与”符号 (&) 和由引号括起来的星号 (*) 使用户可以键入字符组合(包括通配符)以返回各种结果。例如,如果用户键入 *,查询将返回所有城市;如果用户键入,查询将返回所有以“天”开头的城市;如果用户键入 *家*,查询将返回所有包含“家”的城市。

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

在出现查询提示时,键入,然后按 Enter。

11.该查询将运行,然后显示深圳客户的订单。

指定参数数据类型

您还可以指定参数应该接受的数据类型。可以设置任何参数的数据类型,但尤其重要的是设置数值、货币或日期/时间数据的数据类型。在指定参数应该接受的数据类型后,如果用户输入错误类型的数据(例如,应该输入货币,但输入了文本),则会看到更有帮助的错误消息。

 注释    如果将参数设置为接受文本数据,则输入的任何内容都将被解释为文本,并且不会显示任何错误消息。

若要指定查询中参数的数据类型,请执行以下步骤:

1.在设计视图中打开查询,在“设计”选项卡上的“显示/隐藏”组中,单击“参数”
2.“查询参数”对话框中的“参数”列中,为您要为其指定数据类型的每个参数键入提示信息。请确保每个参数都与您在查询设计网格的“条件”行中使用的提示信息相匹配。
3.“数据类型”列中,选择每个参数的数据类型。

TopPageIcon_CLV 返回页首

根据数据进行计算

通常,不使用表存储基于同一数据库中的数据计算得到的值。例如,罗斯文 2007 中的“订单明细”表不存储产品小计,因为任何给定产品的小计都可以使用存储在“订单明细”表中的“数量”、“单价”和“折扣”字段中的数据计算得到。

在某些情况下,计算得到的值可能会过期,因为这些值所基于的值发生了更改。例如,您可能不希望在表中存储某人的年龄,因为您每年都必须更新该值;相反,您可以存储此人的出生日期,然后在查询中使用表达式来计算此人的年龄。

按照下列步骤可创建基于“订单明细”表中的数据计算产品小计的查询。

1.打开先前使用这些步骤设置的罗斯文数据库。
2.“创建”选项卡上的“宏和代码”组中,单击“查询设计”
3.“显示表”对话框的“表”选项卡上,双击“订单明细”
4.关闭“显示表”对话框。
5.在“订单明细”表中,双击“产品 ID”以将此字段添加到查询设计网格的第一列。
6.在该网格的第二列中,右键单击“字段”行,然后单击快捷菜单中的“显示比例”
7.“显示比例”框中,键入或粘贴以下内容:

小计: ([数量]*[单价])-([数量]*[单价]*[折扣])

单击“确定”

这是计算字段。计算字段将每一种产品的数量乘以该产品的单价,将每一种产品的数量乘以该产品的单价和折扣,然后从总单价中减去总折扣。

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

该查询将运行,并且显示每个订单的产品和小计列表。

9.按 Ctrl+S 保存该查询,然后将该查询命名为产品小计

TopPageIcon_CLV 返回页首

查看汇总或聚合数据

使用表记录事务或存储经常出现的数值数据时,如果能够查阅聚合数据(如总和或平均值)是非常有用的。

Access 允许通过添加“汇总”行来查看任何数据表 (数据表:以行列格式显示的来自表、窗体、查询、视图或存储过程的数据。)中的简单聚合数据。“汇总”行是位于数据表底部的行,可显示汇总值或其他聚合值。

 注释    不可向 Web 查询的数据表添加“汇总”行。

按照下列步骤可以向在上一示例中创建的“产品小计”查询添加“汇总”行:

1.运行“产品小计”查询,并使结果在数据表视图 (数据表视图:以行列格式显示来自表、窗体、查询、视图或存储过程中的数据的视图。在数据表视图中,可以编辑字段、添加和删除数据,以及搜索数据。)中处于打开状态。
2.“开始”选项卡上的“记录”组中,单击“汇总”

数据表的底部随即会出现一个新行,该行的第一列将显示“汇总”一词。

3.单击数据表的最后一行中名为“汇总”的单元格。

请注意,该单元格中将出现一个箭头。

4.单击该箭头可查看可用的聚合函数。

因为该列中包含文本数据,所以只有两种选择:“无”“计数”

5.选择“计数”

单元格内容将从“汇总”更改为列值的计数。

6.单击相邻的单元格(第二列)。

请注意,该单元格中将出现一个箭头。

7.单击该箭头,然后单击“合计”

该字段将显示列值的总和。

8.保持该查询在数据表视图中处于打开状态。

为更复杂的汇总创建汇总查询

数据表中的“汇总”行非常有用,但对于更复杂的问题,应该使用汇总查询。汇总查询是一种选择查询,通过这种查询可以对数据进行分组和汇总。例如,假设您想要查看每种产品的销售总计。在汇总查询中,可以使用 Sum 聚合函数 (聚合函数:用于计算总计的函数。例如:SUM、COUNT、AVG 或 VAR。)来查看每种产品的销售总计。

 注释    不能在 Web 查询中使用聚合函数。

按照下列步骤修改“产品小计”查询,以使其按产品对产品小计进行汇总。

1.“开始”选项卡上的“视图”组中,单击“视图”,然后单击“设计视图”

“产品小计”查询将在设计视图中打开。

2.“设计”选项卡上的“显示/隐藏”组中,单击“汇总”

“总计”行显示在查询设计网格中。

 注释    尽管它们的名称相似,但是设计网格中的“总计”行与数据表中的“汇总”行并不相同:

在设计网格中使用“总计”行,可以按字段值进行分组。
可以向汇总查询的结果中添加数据表“汇总”行。
在设计网格中使用“总计”行时,必须为每个字段选择一个聚合函数。如果不想对某个字段执行计算,则可以按该字段进行分组。
3.在设计网格的第二列的“总计”行中,从下拉列表中选择“总计”
4.“设计”选项卡上的“结果”组中,单击“运行”

该查询将运行,并且显示包含小计的产品列表。

5.按 Ctrl+S 保存该查询。使该查询处于打开状态。

创建交叉表查询以添加另一级别的分组

现在,假设您想要查看产品小计,但您还想要按月份进行聚合,以便每行显示一种产品的小计,每列显示一个月份的产品小计。要同时显示一种产品的小计和一个月份的产品小计,请使用交叉表查询 (交叉表查询:这种查询用于对记录计算总计、平均值、计数或其他类型总计,然后按照两类信息对结果进行分组:一组信息分布在数据表的左侧,另一组分布在数据表的顶端。)

 注释    创建的 Web 查询不可为交叉表查询。

可以再次修改“产品小计”查询,以使该查询返回产品小计行和每月小计列。

1.“开始”选项卡上的“视图”组中,单击“视图”,然后单击“设计视图”
2.“查询设置”组中,单击“显示表”
3.“显示表”对话框中,双击“订单”,然后单击“关闭”
4.“设计”选项卡上的“查询类型”组中,单击“交叉表”

在设计网格中,隐藏了“显示”行,显示了“交叉表”行。

5.在设计网格的第三列中,右键单击“字段”行,然后单击快捷菜单中的“显示比例”“显示比例”框将打开。
6.“显示比例”框中,键入或粘贴以下内容:

月份: "月份 " & DatePart("m", [订单日期])

7.单击“确定”
8.“交叉表”行中,从下拉列表中选择以下值:为第一列选择“行标题”,为第二列选择“值”,为第三列选择“列标题”
9.“设计”选项卡上的“结果”组中,单击“运行”

该查询将运行,并且显示按月聚合的产品小计。

10.按 Ctrl+S 可保存查询。

TopPageIcon_CLV 返回页首

使用其他表中的数据创建新表。

您可以使用生成表查询,根据其他表中存储的数据创建一个新表。

 注释    创建的 Web 查询不可为生成表查询。

例如,假设您要将南京订单的数据发送到使用 Access 准备报表的南京业务合作伙伴。您希望仅发送特定于南京订单的数据,而不是发送所有订单数据。

您可以构建包含南京订单数据的选择查询,然后按照下列步骤使用该选择查询创建新表:

1.打开先前使用这些步骤设置的罗斯文数据库。
2.如果打开数据库时该数据库不受信任,那么为了运行生成表查询,可能需要使用显示在功能区下面的消息栏启用数据库内容。

blueup_CLV演示如何启用数据库

在消息栏中,单击“启用内容”

 注释    如果数据库位于受信任的位置,则不会出现消息栏,且无需启用内容。

3.关闭“登录对话框”窗体。
4.“创建”选项卡上的“宏和代码”组中,单击“查询设计”
5.“显示表”对话框中,双击“订单明细”“订单”
6.关闭“显示表”对话框。
7.“订单”表中,双击“客户 ID”“发货城市”以便将这些字段添加到设计网格中。
8.“订单明细”表中,双击“订单 ID”“产品 ID”“数量”“单价”“折扣”,以便将这些字段添加到设计网格中。
9.在设计网格的“发货城市”列中,清除“显示”行中的框。在“条件”行中,键入'南京'(包括单引号)。

在使用查询结果创建表之前,请对其进行验证。

10.“设计”选项卡上的“结果”组中,单击“运行”
11.按 Ctrl+S 可保存查询。

“另存为”对话框随即出现。

12.“查询名称”框中,键入南京订单查询,然后单击“确定”
13.“开始”选项卡上的“视图”组中,单击“视图”,然后单击“设计视图”
14.“设计”选项卡上的“查询类型”组中,单击“生成表”

将显示“生成表”对话框。

15.“生成表”对话框中的“表名称”框中,键入南京订单,然后单击“确定”
16.“设计”选项卡上的“结果”组中,单击“运行”
17.在确认对话框中,单击“是”进行确认。

将创建新表,且该表显示在导航窗格中。

 注释    如果已存在使用您指定的名称的表,该表将在查询运行前被删除。

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

因为存在“南京订单”表,将会出现警告对话框。

19.单击“否”取消操作,并且关闭该对话框。

TopPageIcon_CLV 返回页首

将其他表中的数据添加到一个表

您可以使用追加查询检索一个或多个表中的数据,并将这些数据添加到另一个表中。

 注释    创建的 Web 查询不可为追加查询。

假设您创建了一个要与南京商业协会共享的表,但您发现该协会也在与石家庄地区的客户合作。您希望在与该协会共享该表之前,将包含石家庄地区数据的行添加到该表中。

您可以按照下列步骤将石家庄地区的数据添加到在上一示例中创建的“南京订单”表中:

1.在设计视图中打开名为“南京订单查询”的查询。
2.“设计”选项卡上的“查询类型”组中,单击“附加”“追加”对话框随即打开。
3.“追加”对话框中,单击“表名称”框中的箭头,然后在下拉列表中选择“南京订单”
4.单击“确定”

将关闭“追加”对话框。在设计网格中,“显示”行消失,并出现“追加到”行。

5.在设计网格中的“发货城市”列的“条件”行中,删除 '南京',然后键入 '石家庄'
6.“追加到”行中,为每列选择适当的字段。

在本例中,“追加到”行的值应与“字段”行的值相匹配,但这并非追加查询正常运行的必需条件。

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

TopPageIcon_CLV 返回页首

自动更改数据

您可以使用更新查询来更改表中的数据,还可以使用更新查询输入条件以指定应更新哪些行。通过更新查询,可以在执行更新前查看要更新的数据。

要点  操作查询无法撤消。应考虑对要使用更新查询进行更新的所有表进行备份。

 注释    创建的 Web 查询不可为更新查询。

上一示例中,您向“南京订单”表中追加了行。在“南京订单”表中,“产品 ID”字段显示数值“产品 ID”。为使这些数据对于报表更有用,您可能希望将产品 ID 替换为产品名称。要替换产品 ID,必须首先将“南京订单”表的“产品 ID”字段的数据类型从“数值”更改为“文本”,以便“产品 ID”字段可以接受产品名称。

可以按照下列步骤更新“南京订单”表中的值:

1.在设计视图中打开“南京订单”表。
2.在“产品 ID”行中,将“数据类型”从“数值”更改为“文本”
3.保存并关闭“南京订单”表。
4.“创建”选项卡上的“宏和代码”组中,单击“查询设计”
5.“显示表”对话框中,双击“南京订单”“产品”
6.关闭“显示表”对话框。
7.“设计”选项卡上的“查询类型”组中,单击“更新”

在设计网格中,“排序”“显示”行将消失,并且出现“更新到”行。

8.“南京订单”表中,双击“产品 ID”将此字段添加到设计网格中。
9.在设计网格中“产品 ID”列的“更新到”行中,键入或粘贴以下内容:

[产品].[产品名称]

提示  可以在“更新到”行中使用空字符串 ("") 或 NULL,通过更新查询来删除字段值。

10.“条件”行中,键入或粘贴以下内容:

[产品 ID] Like ([产品].[ID])

其中,Like 关键字是必需的,因为您要比较的字段中包含不同类型的数据(“产品 ID”为文本数据,“ID”为数值数据)。

11.通过在数据表视图中查看查询,可查看将要使用更新查询更改哪些值。

“设计”选项卡上的“结果”组中,单击“查看”,然后单击“数据表视图”

查询将返回要更新的“产品 ID”列表。

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

打开“南京订单”表时,您会发现“产品 ID”字段中的数值已替换为“产品”表中的产品名称。

TopPageIcon_CLV 返回页首

自动删除数据

您可以使用删除查询来删除表中的数据,并且可以使用删除查询输入条件来指定应删除的行。通过删除查询,您可以在执行删除操作前查看要删除的行。

 注释    创建的 Web 查询不可为删除查询。

假设您正准备将“南京订单”表(在上一示例中更新)发送到南京商业协会,但您注意到某些行包含一些空字段。您希望在发送该表之前删除这些包含空字段的行。您可以直接打开该表,手动删除这些行。但是,如果存在大量需要删除的行,并且您具有有关应删除哪些行的明确条件,您会发现使用删除查询非常便利。

按照以下步骤,可以使用查询来删除“南京订单”表中的不包含“订单 ID”值的行:

1.“创建”选项卡上的“宏和代码”组中,单击“查询设计”
2.“显示表”对话框中,双击“南京订单”
3.关闭“显示表”对话框。
4.“设计”选项卡上的“查询类型”组中,单击“删除”

在设计网格中,“排序”“显示”行将消失,并且出现“删除”行。

5.“南京订单”表中,双击“订单 ID”以将其添加到网格中。
6.在设计网格中“订单 ID”列的“条件”行中,键入 Is Null
7.“设计”选项卡上的“结果”组中,单击“运行”

TopPageIcon_CLV 返回页首