Access中的查询
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Access中的查询
数
据库的真正优点是具有很强的数据查看和数据统计的能力。
通常并不需要同时
查看所有表里的数据;有时,又需要查询位于不同表中的数据。
在这种情况下,
就应该使用“查询”。
“查询”是一种提问,可以针对单个数据表提出较简单的问题,也可以针对一些相互关联的数据表提出较为复杂的问题。
“查询”命令的作用就是建立这样的查询,以便用户对数据库中的数据进行检索,当运行一个建立好的查询对象时,Access会自动建立起一个动态集合,这上动态集合把在一个或多个表对象中选择的多个字段中的数据集成起来。
通过“查询”可以通过不同的方法来查看、更改以及分析数据;也可以将“查询”作为窗体和报表的记录源。
从而方便地对数据进行查看、更改和分析。
而查询的结果本身又可以看作一个数据表,可以作为别的数据库操作的数据源。
在上一章简单地介绍了创建和使用简单的查询,这一章将详细介绍。
4.1 查询准则
通常在使用查询时只是对数据库中的一部分数据记录进行查询和计算。
而如何在Access 2003数据库中将满足用户条件的数据记录挑选出来,这就要设置一定的准则。
准则为用户提供了一个选择条件,满足条件的记录才会被查询。
例如,在统计发货时间在2001年1月到2月间的公司订单总数时,就需要利用准则来检索所有的订单,从中挑选出符合条件的订单,再进行统计计算。
在查询的“设计”视图以及“高级筛选/排序”窗口中,都可以在“准则”单元格内通过使用准则表达式来体现查询条件,从而限定查询的范围。
4.1.1 文本值
在Access表中的字段进行查询时最经常采用到的就是以文本值的准则而设定的查询条件。
使用文本值作为准则表达式可以方便地限定查询的范围,实现一些相对简单的查询,如表4-1所示。
表4-1 使用文本值作为准则的示例
字段准则说明
产品类别“饮料”显示产品类别为饮料的产品
产品类别“饮料”Or“香料”使用Or运算符显示产品类别为饮料或香料的产品
产品类别 In(“饮料”,“香料”) 使用In运算符显示产品类别为饮料或香料的产品
2
产品类别 Not“饮料”使用Not运算符以显示除了饮料以外的其他产品
生产日期#1/1/99# 显示在99年1月1日生产的产品
产品ID Right([产品ID],1)="1" 使用Right函数以显示产品ID值结尾数字为1的产品
产品名称 Len([产品名称])<Val(10)使用Len和Val函数以显示产品名称小于10个字符的产品4.1.2 处理日期结果
对于在Access表中的字段进行查询时,有时还要采用以计算或处理日期所得到的结果作为准则而设定的查询条件。
使用计算或处理日期结果作为准则表达式,可以方便地限定查询的时间范围,如表4-2所示。
表4-2 使用处理日期结果作为准则的示例
字段准则说明
生产日期Between Date( ) And DateAdd
("m",1,Date( ))
用Between…And运算符和DateAdd和Date函
数,以显示在当天日期之后的一个月内所生产的
产品
生产日期<Date( )-30 使用Date函数以显示30天之前所生产的产品生产日期 Year([生产日期])=1998 使用Year函数以显示1998年所生产的产品
生产日期 DatePart("q",
[生产日期])=1 使用DatePart函数以显示第一季度所生产的产品
生产日期DateSerial(Year([生产日期]), Month([生
产日期])+1, 1)-1
使用DateSerial、Year和Month 函数以显示每个
月最后一天所生产的产品
生产日期Year([生产日期])=Year(Now())And
Month( [生产日期] )= Month( Now() )
使用Year和Month函数和And运算符以显示当
前年、月所生产的产品
4.1.3 空字段值
空字段值分为Null值和空字符串,在查询时常常会用到它来查看数据库中的某些记录,如表4-3所示。
表4-3 使用空字段值作为准则的示例
字段准则说明
客户地区Is Null 显示“货主地区”字段为Null(空白)的客户信息
客户地区Is Not Null 显示“货主地区”字段包含有值的客户信息
传真" " 显示没有传真机的客户信息,用“传真”字段中的零长度字符串值而不是使用Null值来指出
4.1.4 字段的部分值
对于在Access表中的字段进行查询时,有可能需要只对字段中包含一定条件的记录进
Access中的查询 3
行查询。
使用字段的部分值作为准则表达式,可以方便地限定查询的范围,实现一些相对简单的查询,如表4-4所示。
表4-4 使用字段的部分值作为准则的示例
字段准则说明
供应商Like "A*" 显示供应商名称以字母A开头的产品信息
供应商Like "*Ltd." 显示供应商名称以“Ltd.”结尾的产品信息
供应商Like "[A-D]*" 显示供应商名称以字母A-D开头的产品信息
供应商Like "* Orleans *" 显示供应商名称包含字符串“Orleans”的产品信息
供应商Like "Exotic Liqui??" 显示供应商名称以“Exotic”作为名称的第一部分,并具有一个7个字母长的第二名称,且其中前5个字母是“Liqui”,而最后的2个字母为未知的产品信息
4.1.5 域合计函数的结果
对于在Access表中的字段进行查询时,也可以利用合计函数的计算结果进行查询,如表4-5所示。
表4-5 使用合计函数的结果作为准则的示例
字段准则说明
运货费>(DStDev("[Freight]", "订单") +
DAvg("[Freight]","订单"))
使用Davg和DStDev函数以显示货运成本高于
平均值加上货运成本的标准偏差的所有订单
单位数量 >DAvg("[单位数量]", "订单明细") 使用Davg函数以显示订购数量高于平均订购数量的产品
在上面介绍了几种建立准则的方法,利用这些方法可以根据具体需要对查询提出相应的准则。
除了所介绍的五种方法之外,还可以利用子查询来建立一个查询的准则
4.2 查询的分类
查询可以根据其对数据源操作和结果的不同分为5大类:选择查询、交叉表查询、操作查询、参数查询和SQL查询。
下面对这5类进行简单的介绍:
1. 选择查询
选择查询是最常见的一种查询类型,它从一个或多个表、查询中检索数据,并且在可以更新记录(一定的限制条件下)的数据表中显示结果。
也可以使用选择查询来对记录进行分组,并且对记录作总计、计数、平均值以及其他类型的总和计算。
2. 交叉表查询
使用交叉表查询可以计算并重新组织数据的结构,这样可以更加方便地分析数据。
交叉表查询计算数据的总计、平均值、计数或其他类型的总和,这种数据可分为两组信息:一类在数据表左侧排列,另一类在数据表的顶端。
数据表行和列的交叉处显示该字段的计
4
算结果。
3. 操作查询
操作查询是这样一种查询,使用这种查询只需进行一次操作就可对许多记录进行更改和移动。
它包括四种查询:删除查询、更新查询、追加查询和生成表查询。
4. 参数查询
参数查询是这样一种查询,它在执行时显示自己的对话框以提示用户输入信息,检索要插入到字段中的记录或值。
可以设计此类查询来提示更多的内容;例如,可以设计它来提示输入两个日期,然后 Access 检索在这两个日期之间的所有记录。
5. SQL查询
SQL 查询是用户使用SQL语句创建的查询。
可以用结构化查询语言 (SQL) 来查询、更新和管理 Access 这样的关系数据库。
4.3 创建和使用简单的查询
对于数据库应用系统的普通用户来说,数据库是不可见的。
用户要察看数据库当中的数据都要通过查询操作,所以查询是数据库应用程序当中非常重要的一个部分。
查询不仅可以对一个表进行简单的查询操作,还可以把多个表的数据连接到一起,做一个整体的查询。
下面先从简单查询开始,学习怎样创建查询和使用查询。
创建查询的方法有两种,让还是从“使用向导创建查询”开始吧。
4.3.1 使用向导创建查询
已经学习了使用向导创建数据表,已经对向导工具的方便性有了体会。
同样的,使用向导创建查询也是很简便易学的。
步骤如下:
1. 在数据库窗口左边的“列表栏”中选择“查询”,并双击“使用向导创建查询”选项,
会看到图4-1所示的窗口。
图4-1 确定要查询的表和字段
Access中的查询 5
2. 在“表/查询”组合框中选择一个表或查询作查询的对象。
如果选择一个查询,表示
对一个查询的结果进一步查询。
这里选择“雇员”。
3. 在“可用字段”中选择要查询的字段,选择的方法和前面用向导创建表中的操作类
似。
这里单击向右的双箭头按钮,表示全选。
单击“下一步”按钮,出现图4-2所示的窗口。
图4-2 确定查询类型
4. 在这个窗口中要求用户选择“明细”还是“汇总”。
z“明细”是指在查询中显示每条纪录的每个被选字段,不作其他处理。
z“汇总”是指在查询中对纪录中的某些字段进行求和、求均值等处理,并把处理的结果显示出来。
要注意的是这一步的窗口并不总是出现的,只有当被选的字段中有“数字”类型才会出现这个窗口,否则会跳过这一步。
这里暂时不使用“汇总”,而选择“明细”。
单击“下一步”按钮,会出现图4-3所示的窗口。
图4-3 为查询指定标题
6
5. 在这个窗口中要求用户输入查询的标题,并且选择创建结束后的下一步动作。
选择
“打开查询查看信息”,单击“完成”按钮,就可以看到查询的结果了,如图4-4所示。
图4-4 “雇员表查询”窗口
4.3.2 在设计视图中创建查询
与创建表一样,用向导创建查询如果出现不符合要求的情况,这时候也需要使用设计视图,使用设计视图既可以创建查询,也可以修改已有的查询,还将看到如何为查询选择字段。
步骤如下:
1. 在数据库窗口中双击“在设计视图中创建查询”的选项,出现图4-5和图4-6所示的
两个窗口。
在设计视图中,窗口分为两部分(如图4-6所示)上部显示了新建对象中要使用的所有表对象,每个表对应于一个字段列表,下部是定义查询的设计表格。
其中:“字段”项设置定义查询对象时要选择表对象的哪些字段。
“表”项设置字段的来源。
“排序”项定义字段的排序方式。
“显示”项设置选择字段是否在“数据表视图”中显示出来。
“条件”项设置字段限制条件。
图4-5 显示表对话框
2. 图4-5所示的“显示表”对话框有三页:表、查询、两者都有,从这三个列表当中,
Access中的查询 7
可以看到当前数据库当中所有的表和查询。
当创建查询时,可以从中选择一个或几个表或查询,作为查询的对象。
这里只选中“雇员”表,单击“添加”按钮,可以看到“借书人”表已经被添加到设计视图中(如图4-7所示)。
单击“关闭”按钮关闭“显示表”对话框。
图4-6 查询设计视图
图4-7 在查询设计视图窗口中显示表的字段
3. 为查询选择了数据表之后,下一步就是为查询选择字段。
如果要选择所有的字段,
可以在设计视图中“雇员”列表框中双击“*”,可以看到设计视图下方的表格中的字段栏显示“借书人.*”,这就表示选择了数据表中的所有字段。
选择数据表的部分字段的方法在下一节介绍。
在查询对象窗口下部的设计表格中“条件”栏用来输入各个字段的限制条件,只有满足字段限制条件的数据才会在执行选择查询对象时被选择。
如果要选择字段值为某个特定值的记录,可直接把特定值输入到“准则”这一行,如果限制条件的字段是文本类型,则应用双引号括起来。
8
如果要选择符合多个限制条件之一的记录,可在“准则”这一行中用“or”关键字把这样限制条件连接起来。
用户除了可以直接输入字段特定值外,还可以输入<、>等比较操作符。
用户可以为很多字段设置限制条件,此时只有所有符合限制条件的记录才会被选择。
用户也可以设置复杂的条件,只需单击鼠标右键,在弹出的快捷菜单中单击“表达式生成器”项,在表达式生成器中,输入表达式。
4. 如果不想对查询条件作进一步限制,就可以关闭设计视图窗口,这时系统会提示你
存盘,并要求输入查询名称。
为这个新创建的查询取名为“雇员情况”。
注意查询的名称不能和已经有的表名称相同。
这样又成功地创建了一个查询。
4.3.3 按查询准则选择字段,记录和分类显示
前面创建的查询都是一种最简单的情况,也就是只对一个单独的表,查询它的所有纪录的所有字段。
在实际情况中,这种简单的查询是很少使用的,一般情况下,都要对查询对象进行一些条件的限制,只有查询关心的数据,其他的数据不要显示出来。
这就要求在创建查询的时候加上一些查询的条件。
z为查询选择字段。
当查询一个表的时候,并不一定要查看这个表的所有字段,这种情况下就要为查询选择字段。
例如,对借书人表创建一个查询,只要看到“编号”和“姓名”这两个字段,创建的方法如下:
1. 按照前文所述用设计视图创建查询的方法,打开查询设计视图并选择数据表“雇员”。
2. 最简单的方法就是用鼠标在列表框上双击要选择的字段,这样就可以看到设计视图
下方的表格中显示出刚才选择的字段名。
3. 第二种方法可以用鼠标拖放的功能,把要选择的字段拖到表格中。
4. 还有一种方法就是直接在表格中选择,用鼠标单击表格中的“字段”一行的任意一
格,会发现它变成了一个组合框,单击下拉箭头,就会出现“雇员”表中的所有字段名(如图4-8所示),可以从中选择需要的字段。
Access中的查询 9
图4-8 为查询选择字段
5. 选择了字段以后还可以选择是否显示。
在设计视图下方的表格中有一行“显示”栏,
对应每一列都有一个复选框,如果去掉复选框中的标记,那么对应的字段虽然还是存在于该查询的结果中,但是不会显示出来。
z为查询选择记录。
还有另外一种情况,也就是不要查看表的所有记录,而是有选择地查看部分记录。
例如查询“雇员”表时,只要查询“城市”是北京的雇员,步骤如下:
1. 先按照前面的方法选择字段:“编号”、“姓名”和“城市”。
2. 在“城市”列的“条件”行里键入表达式‘=北京’(如图4-9),这样就可以把查询
结果限制到北京的雇员中。
3. 单击“城市”列里的“显示”复选框(如图4-9)。
这个查询的记录都是北京的,所
以这个字段没有必要显示出来。
4. 关闭设计视图,把新创建的查询存盘并为它取名为“北京雇员情况”。
这样创建的查询包括了“雇员”表中的“编号”、“姓名”和“城市”三个字段,但是在查看这个查询的结果时,只能看到“编号”和“姓名”两个字段。
图4-9 输入查询条件
10
z按条件排序或分组
还有一种情况,为了查看方便,经常需要把查询的结果按照某种顺序显示出来。
在Access中可以很方便地实现这个要求。
下面对“雇员表”创建一个查询,并要求查询结果按照“编号”从大到小排序,步骤如下:
1. 按照前面叙述的方法,用设计视图创建查询,选择三个字段:“编号”、“姓名”和“城
市”。
2. 单击“编号”的“排序”行,会发现他变成了一个组合框。
单击下拉箭头,选择“降
序”(如图4-10所示)
3. 关闭视图,为新创建的查询命名为“人员情况”。
可以看到查询的结果按照“编号”字段从大到小的顺序显示。
值得注意的是,排序功能还可以用来对记录分组。
图4-10 为查询结果排序
4.3.4 使用查询
前面介绍了创建简单查询的主要方法,那么怎样使用查询也是关心的问题。
一般的创建的查询有以下一些作用:
1.查看数据库中的数据。
这是查询最简单的功能,方法也很简单,只要在数据库窗口中打开“查询”组,找到要打开的查询,用鼠标双击对应的项就行了。
下图显示了一个打开的查询。
Access中的查询 11
图4-11 查询结果
2.修改数据表中的数据。
用户可以直接在查询的表格中输入、删除或修改数据,方法也很简单,只要选中数据项直接进行操作就可以了。
4.4 创建并使用高级查询
在以上两节中讨论了查询的分类和各种建立简单查询的方法,包括使用查询向导建立查询和使用设计视图建立查询。
初步感到了Access中数据库查询的强大功能。
但有时要完成一个特定的任务或实现一个较复杂的查询,这些简单的查询方法是不够的,或者用起来不一定方便。
在Access中提供了一些高级查询能帮助实现这些功能。
Microsoft Access中的高级查询主要包括4类:交叉表查询、操作查询、参数查询和SQL 查询。
其中操作查询又分为生成表查询、更新查询、追加查询、删除查询。
本节将主要介绍这4类高级查询。
为了让读者更快地掌握这些查询,将结合具体例子来讲解。
4.4.1 交叉表查询
交叉表是一种常用的汇总性表格。
交叉表查询中的数据可分为两组信息:一类在数据表左侧排列,另一类在数据表的顶端。
表行和列的交叉处显示该字段的计算结果,如计算数据的总计、平均值、计数或其他类型的总和等。
在本章第2节已经介绍了使用查询向导可以创建交叉表查询。
这里仍将以简单的例子来介绍使用设计视图创建交叉表查询。
本例中将以某高校4个系的“招生情况”表为基表,创建这样一个交叉表查询:以“系别”为行标题,以招生“年份”为列标题,将“招生数”总计在行和列的交叉处。
12
具体步骤如下:
1. 在数据库窗口中单击“新建”按钮。
打开“新建查询”对话框。
2. 单击“设计视图”选项,然后单击“确定”按钮,打开查询的设计视图。
3. 在“显示表”对话框中单击“招生情况”表,然后单击“添加”按钮,将表“招生
情况”添加到查询窗口中。
单击“关闭”按钮。
4. 将“系别”、“年份”和“招生数”三个字段拖动到“字段”网格中,以添加这三个
查询字段。
5. 单击工具栏中的“查询类型”按钮,此时将显示如图4-12所示的下拉菜单。
单击“交
叉表查询”。
在设计网格中将加入“总计”和“交叉表”两行。
(注:当某个字段所对应的总计行中的值为关键字“Group By”时,表示要对这个字段进行分组处理。
这时,对于其他字段就需要进行统计。
在Access应用程序中进行统计,就必须使用统计函数。
Access应用程序一共提供了九种统计函数,分别对应九种不同的基本统计方式。
这些函数的名称、功能和相对应的字段数据类型范围可参见表4-6 在创建综合查询对象的时候,如果存在某个字段在“总计”行中被设置了“Group By”属性,则所有的字段必须或者在“总计”行也被设置了“Group By”属性,或者使用了其他统计函数。
表4-6 统计函数表
函数名称 函数功能 所适用的字段数据类型 Sum 字段值的总和 数值和货币数据类型
Avg 字段的平均值 数值和货币数据类型
Min 字段的最小值 数值、货币、文本和日期数据类型
Max 字段的最大值 数值、货币、文本和日期数据类型Count 不包括Null(空)值的字段数量 任意数据类型
First 该组数据内的第一条记录的字段值 任意数据类型
Last 该组数据内的最后一条记录字段值 数值和货币数据类型
StDev 字段的标准偏差值 数值和货币数据类型
Var 字段的方差值 数值和货币数据类型 查询对象中,用来进行分组的字段,可以是表对象中的字段,也可以一个表达式类型的字段作为分组字段。
Access提供一系列统计函数及文本类型的函数进行统计,用户也可以自己在表达式生成器中编写关于表对象中数据的表达式来进行数据统计。
)
Access中的查询 13
图4-12 “查询类型”的下拉菜单
6. 保持字段“系别”和“年份”对应的“总计”类型“Group By”不变,单击“招生数”对应的“总计”网格。
此时激活了“总计”的下拉菜单,单击右边的倒箭头打开该下拉菜单,选择“Sum”项。
如图4-13所示。
7. 设置交叉表的行标题。
单击“系别”对应的“交叉表”网格。
此时激活了“交叉表”的下拉菜单,单击右边的倒箭头打开该下拉菜单。
如图4-14所示,下拉菜单中有4个选项:“行标题”、“列标题”、“值”和“(不显示)”。
单击“行标题”项。
8. 按步骤7,将“年份”的交叉表网格设为“列标题”,将“招生数”设为“值”。
9. 将“排序”设置为按“年份”升序排列;将“条件”设置为“1996年之后”,即“>1996”。
最后的设置结果如图4-15所示。
10. 单击工具栏中的“执行”按钮,则查询结果将显示出来。
如图4-16所示。
图4-13 选择“总计”类型
图4-14 设置“行标题”
14
图4-15 设置“列标题”和“值”
图4-16 查询结果
4.4.2 操作查询
操作查询是仅在一个操作中更改或移动许多记录的查询。
操作查询共有四种类型:删除查询、更新查询、追加查询与生成表查询。
一、生成表查询
顾名思义,生成表查询是利用一个或多个表中的全部或部分数据创建新表的查询。
这种查询有利于数据导出到其他Microsoft Access数据库的表中,便于数据的备份。
例如,可以从“产品”表中创建“库存量少的产品”生成表。
以便于清楚地知道哪些产品需要加大生产量。
就以该例来说明如何创建生成表查询。
在这之前要先建立一个选择查询。
具体步骤如下:
1. 在数据库窗口中单击“新建”按钮。
打开“新建查询”对话框。
2. 单击“设计视图”选项,然后单击“确定”按钮,打开查询的设计视图。
3. 在“显示表”对话框中单击“产品”表,然后单击“添加”按钮,将表“产品”添
加到查询窗口中。
单击“关闭”按钮。
然后将“产品ID”、“产品名称”、“类别ID”和“库存量”四个字段拖动到“字段”网格中,以添加这四个查询字段。
4. 将“排序”设置为按“产品ID”升序排列;将“条件”设置为:“库存量”<10。
选
Access中的查询 15择查询的设计结果如图4-17所示。
图4-17 设置选择查询
图4-18 “生成表”对话框
5. 单击工具栏中的“查询类型”按钮,然后单击“生成表查询”选项,打开“生成表
“对话框。
如图4-18所示。
用户在该对话框的“表名称”文本框中输入生产新表的名称。
如果单击“当前数据库”,则用户把生成的新表存放到当前打开的数据库中。
如果单击“另一数据库”,“文件名”文本框被激活,则需要用户输入新表存放的路径。
这里选择前者。
单击“确定”按钮。
6. 单击工具栏中的“执行”按钮,则将弹出图4-19所示的提示对话框。
单击“是”按
钮将执行查询操作,但此时结果并未显示出来。
图4-19 创建新表的提示对话框
7. 回到数据库窗口中,单击“表”对象。
可以看到新建的生成表。
双击该表,即显示
查询的结果。
如图4-20所示。
16
图4-20 查询结果
二、更新查询
更新查询可对一个或多个表中的一组记录作全局的更改。
例如,可以将所有毛衣的价格提高10个百分点,或将某一工种人员的工资提高 5 个百分点。
使用更新查询,可以直接更改现有表中的数据,也可以用另外一个表的数据更新它。
下面分别就这两种情况简单介绍。
z直接更改现有表中的数据。
仍结合具体例子。
在这里更新一个“订单”表。
将“货主城市”为“北京”的“订货量”增加20。
为了便于比较,先创建一个普通的选择查询,在此基础上创建更新查询,并将更新前后的结果都列出来比较。
具体操作步骤如下:
1. 在数据库窗口中单击“新建”按钮。
打开“新建查询”对话框。
2. 单击“设计视图”选项,然后单击“确定”按钮,打开查询的设计视图。
3. 在“显示表”对话框中单击“订单”表,然后单击“添加”按钮,将表“订单”添
加到查询窗口中。
单击“关闭”按钮。
4. 将“订单ID”、“订货量”、“货主名称”和“货主城市”四个字段拖动到“字段”网
格中,以添加这四个查询字段。
5. 将“条件”设置为:“货主城市”=“北京”。
选择查询的设计结果如图4-21所示。
图4-21 选择查询设计网格
6. 单击工具栏中的“执行”按钮,查询结果将显示出来,如图4-22的左图所示。
7. 在如图4-23的设计视图中,单击工具栏中的“查询类型”按钮,然后单击“更新查
询”选项,此时在设计网格中的“表”行下面插入“更新到”行。
8. 在“订货量”字段对应的“更新到”网格中输入:[订货量]+20。
即将原始表中的“订。