第 5章 查询的创建及应用本章重点本章主要介绍查询的创建和应用 。 查询的概念,类型,功能和视图;如何用各种方法创建不同的查询;在设计视图中通过对查询的字段进行增加,删除或修改进而修改查询,还可以为查询设置一定的准则;在高级查询操作中主要是介绍如何在查询中进行计算,如何创建参数查询,操作查询和 SQL查询等 。
在数据库的应用过程中,用户往往会查找一些自己感兴趣的信息。比如,读者会查看图书馆有哪个出版社出版哪些书,教师查看有哪些学生的哪些课程需要重修等。这样就需要建立查询,通过查询,数据库就会根据读者提供的信息为读者搜索所需信息。那么,什么是查询?如何设计一个优秀的查询?
第 5章 查询的创建及应用
5.1 查询的基本知识
5.2 创建查询
5.3 用设计视图创建和修改查询
5.4 高级查询
5.5 查询应用实例
5.6 习题
5.1 查询的基本知识
数据库的真正优点是具有很强的查询和统计数据的能力,
用户利用查询既可以检索符合特定条件的存储于表中的数据,
也可以通过查询向表中添加数据。在建立查询时,用户每次可以从一张或多张表中获取数据,在数据库响应了用户的要求并完成数据的检索以后,用户可以浏览和分析数据。用户可以将建立好的查询作为一个窗体、报表、或另一个查询的基础。
查询就是根据给定的条件,从数据库的表中筛选出符合条件的记录,构成数据的集合。查询建立后,可以被看成是一个简化的数据表,由它构成窗体、报表的来源,并可以以它为基础构成其他查询。
查询的结果以工作表的形式显示,该表与基本表有非常相似的外观,但并不是一个基本表,而是符合查询条件的记录集合,其内容是动态的,在符合查询条件的前提下,
它的内容随着基本表而变化。
简单来说,查询就是有关存储在表内的数据的查找,
或对数据进行某一操作的要求。设计查询的目的就是告诉
Access需要检索哪些数据。
5.1.1 查询的类型
根据对数据源操作方式及结果的不同,Access 2002可创建的查询类型分为:选择查询、参数查询、交叉表查询、
操作查询和 SQL查询。
1.选择查询
这是最常见的查询类型,它从一个或多个表中检索数据,
并且在可以更新记录(带有一些限制条件)的数据表中显示结果。也可以使用选择查询对记录进行分组,并且对记录作总计、计数、平均以及其他类型总和的计算。
2.参数查询
参数查询是一种特殊的查询,它在执行时显示一个对话框,以提示用户输入查询条件,系统根据输入的查询条件将查询结果以指定的形式显示出来。设计此查询可以用来提示更多的内容,例如,可以设计提示输入两个日期,然后 Access 2002检索在两个日期之间的所有记录。
将参数查询作为窗体和报表的基础也很方便。例如,利用参数查询为基础可以创建月图书流量报表。在打印报表时,Access显示对话框询问所需报表的月份,输入月份后,
Access打印相印的报表。也可以创建自定义窗体或对话框,
来代替使用参数查询对话框提示输入查询的参数。
参数查询的创建只能通过查询的设计视图或 SQL视图来完成。
3.交叉表查询
交叉表查询可以计算并重新组织数据的结构,从而更方便地分析数据。此查询可以计算数据的总和、平均值、计数或其他类型的总和,并可以分成两组信息:一组列在数据表的左侧,另一组列在数据表的上部。
4.操作查询
操作查询仅使用一次操作就可以对许多记录进行更改和移动。用户根据对话框提示输入参数,并检索符合所输参数的记录或值。但是只有在运行查询时才按照查询检索到的记录操作表。一般在大批量修改表中数据的场合应用。操作查询共有四种类型:删除、更新、追加和生成表查询。删除查询可以从一个或者多个表中删除一组记录;更新查询可以对一个或多个表中的一组记录作全局更改;生成表查询可以根据一个或多个表中的全部或部分数据新建表,它有助于创建表以导出到其他 Access数据库或包含所有旧记录的历史表。
5,SQL查询
SQL即结构化查询语言,是使用关系模型的数据库应用语言。 SQL查询是 Microsoft Access 2002中功能最强大、最完善的一种查询。 Access中所有的查询都可以认为是一个
SQL查询,在其他查询提供的创建工具中,用户虽不用输入
SQL语句,但系统最终都将自动生成 SQL查询。
实际上,只有几种特殊查询 ——联合查询、传递查询、
数据定义查询和子查询才需使用 SQL查询。
5.1.2 查询的功能
从表面上看,打开一个表,隐藏不需要的列,然后打印结果,这样也能完成跟查询一样的功能,但是这只是选择一个表中的数据,而不是保存结果。通过查询,Access为用户提供了极大的灵活性。利用查询,可以完成以下功能:
( 1)选择字段。用户可以在查询中选择表中自己感兴趣的字段,而无须浏览所有字段。
( 2)选择记录。用户可以指定一个条件,只有符合这个条件的记录,才能在查询结果中显示出来。
( 3)排序记录。用户可以指定浏览记录的顺序。
( 4)完成计算。用户可以建立一个计算字段,利用计算字段保存计算结果。
( 5)作为窗体或报表的数据来源。为了从一个或多个表中选择合适的数据在窗体或报表中显示,用户可以建立一个选择查询,将该查询的数据作为窗体或报表的数据来源。当用户每次打开窗体或打印报表时,该查询从表中检索最新数据,
用户也可以在基于查询的数据表或在基于查询的窗体上直接输入或修改数据。
( 6)修改表中数据。采用查询可以一次修改、删除或增加一组相关的记录。
( 7)建立新表。采用生成表查询,可以根据查询结果新建一个表。
5.1.3 查询视图
查询共有五种视图,分别是:
( 1)设计视图。设计视图就是查询设计器,通过该视图可以设计除 SQL查询之外的任何类型的查询。
( 2)数据表视图。数据表视图是查询的数据浏览器,通过该视图可以查看查询运行结果,查询所检索的记录。
( 3) SQL视图。 SQL视图是按照 SQL语法规范显示查询,
即显示查询的 SQL语句,此视图主要用于 SQL查询。
( 4)数据透视表视图和数据透视图视图。在这两种视图中,
可以更改查询的版面,从而以不同方式分析数据。
BACK
5.2 创建查询
Access为建立查询提供了两种方法,一是查询向导,二是查询设计视图。本节将主要介绍如何使用向导和设计器来创建查询。
5.2.1 用向导创建简单查询
选择查询是 Access 2002数据库系统中最基本的,也是用的最多的查询。其他种类的查询往往是以选择查询为基础,
然后进行一些适当的修改就可以了。
【 例 5-1】 用向导创建一个选择查询“学习课程查询”,
包括学生信息表中的“课程编号”、“课程名称”、“学时数”、“教材名称”、“作者”、“出版社”和“出版时间”等字段,它的数据表视图如图 5-1所示。
图 5-1,学习课程查询”数据视图
( 1)打开相应的“学籍管理数据库”,单击对象栏的 【 查询 】 按钮,如图 5-2所示。双击“使用向导创建查询”;或者,单击“数据库”窗口工具栏中的 【 新建 】 按钮,选择
“使用向导创建查询”。
图 5-2 选择“使用向导创建查询”
( 2)单击 【 确定 】 按钮,打开如图 5-3所示的“简单查询向导”对话框一。
图 5-3,简单查询向导”对话框一
( 3)在“表 /查询”列表框中选择新建查询所基于的源表或查询“表:学习课程表”,在“可用字段”列表框中双击所需要的字段,将其添加到“选定的字段”列表框中,或通过
“可用字段”和“选定的字段”两个列表框中间的按钮选择所需字段。重复此步骤可以添加其他所需表或查询中的字段。
设置完成后,单击 【 下一步 】 按钮。打开如图 5-4所示的
“简单查询向导”对话框二。
图 5-4,简单查询向导”对话框二
( 4)在此确定采取“明细查询”还是“汇总查询”,其中:
明细查询:如果只希望在查询中显示每个字段的值,可以单击选取“明细(显示每个记录的每个字段)”单选按钮。
汇总查询:如果需要对查询中的某些字段进行分析后汇总的话,可以单击选取“汇总”单选按钮。
( 5)若选择图 5-4中“汇总”单选按钮并单击“汇总选项”,
系统将弹出如图 5-5所示的“汇总选项”对话框。在该对话框中选择要汇总的字段和汇总方式,设置完毕后单击 【 确定 】
按钮,返回图 5-4所示的“简单查询向导”对话框中。
图 5-5,汇总选项”对话框
( 6)选择完毕后,单击如图 5-4所示的 【 下一步 】 按钮,系统将弹出“简单查询向导”对话框三,如图 5-6所示。
( 7)用户可以设置查询的标题,可以选择“修改查询设计”
选项,在设计视图中对查询作进一步的修改。若是默认选择
“打开查询查看信息”查看数据表视图,则打开数据表视图,
如图 5-1所示。
图 5-6,简单查询向导”对话框三
5.2.2 交叉表查询向导
交叉表查询一般创建在已经存在的表或查询上。通过它可以显示来源于表中某个字段的汇总值,如合计、
计算以及平均等。还可以将它们分组,一组列在数据表的左侧,一组列在数据表的顶部。交叉数据主要是将某字段分组并显示其摘要值的情况,使用交叉表查询,可以对表中的数据进行统计和分析。
【 例 5-2】 创建交叉表查询 ——“教材作者交叉表”,在此查询表中能够显示教材与作者之间的情况。其数据表视图如图 5-7所示。
图 5-7 查询结果表
( 1)打开“学籍管理数据库”,单击工具栏中 【 新建 】 按钮。
( 2)在如图 5-2所示“新建”对话框中,选择交叉表查询向导,然后单击 【 确定 】 按钮,出现如图 5-8所示的“交叉表查询向导”对话框一。
图 5-8,交叉表查询向导”对话框一
( 3)为查询选择数据的来源(可以从表或查询中单独选择,
也可以从两者中共同选择。这样可以创建基于一个或多个表或查询的交叉表查询)。本例中,选择“学习课程表”作为数据源,然后单击 【 下一步 】 按钮,出现如图 5-9所示的
“交叉表查询向导”对话框二。
图 5-9,交叉表查询向导”对话框二
( 4)选择“教材名称”作为行标题(最多可选择三个行标题),单击 【 下一步 】 按钮,出现如图 5-10所示的“交叉表查询向导”对话框三。
图 5-10,交叉表查询向导”对话框三
( 5)选择“作者”作为列标题,单击 【 下一步 】 按钮,出现如图 5-11所示的“交叉表查询向导”对话框四。
图 5-11,交叉表查询向导”对话框四
( 6)选择“单价”做为每一行和列的交叉点。并选择“最大值”函数计算“单价”,单击 【 下一步 】 按钮,出现如图
5-12所示的“交叉表查询向导”对话框五。
( 7)输入查询名称“教材作者交叉表”,单击 【 完成 】 按钮。产生的查询结果数据表视图如图 5-7所示。
图 5-12,交叉表查询向导”对话框五
5.2.3 创建“查找重复项查询”
根据查找重复项查询向导,可以统计出在表或记录中是否有重复数据的记录,或者说确定记录在表中是否共享相同的值。
【 例 5-3】 基于“学习课程表”创建一个查询,能够查找其中的同一出版社出版的教材情况,数据表视图如图 5-13所示。
图 5-13,出版社相同的教材信息”数据表视图
( 1)打开“学籍管理数据库”,单击工具栏中的 【 新建 】
按钮。
( 2)在如图 5-2所示的“新建”对话框中,选择“查找重复项查询向导”,然后单击 【 确定 】 按钮,出现如图 5-14所示的“查找重复项查询向导”对话框一。
图 5-14,查找重复项查询向导”对话框一
( 3)为查询选择数据的来源。本例中,选择“学习课程表”
作为数据源,然后单击 【 下一步 】 按钮,出现如图 5-15所示的“查找重复项查询向导”对话框二。
图 5-15,查找重复项查询向导”对话框二
( 4)选择可能包含重复值的字段,比如“出版社”字段后,
单击 【 下一步 】 按钮,打开如图 5-16所示的“查找重复项查询向导”对话框三。
图 5-16,查找重复项查询向导”对话框三
( 5)在对话框中选择重复字段之外的其他字段。比如,选择
“教材名称”、“作者”和“单价”三个字段。如果在这一步没有选择任何字段,查询结果将对每一个重复值进行总计。单击 【 下一步 】 按钮,打开如图 5-17所示的“查找重复项查询向导”对话框四。
( 6)输入“出版社相同的教材信息”标题,选择“查看结果”
单选按钮,单击 【 完成 】 按钮,结果的数据视图如图 5-13所示。
图 5-17,查找重复项查询向导”对话框四
5.2.4 创建“查找不匹配项查询”
查找不匹配项查询是在两个表中,查询没有相同记录的数据。
例如,在具有一对多关系的两个表中,对于“一”方的表中的每个记录,在“多”方表中可以有多个记录与之对应,但也可以没有任何记录与之对应,使用查询向导查找表之间不匹配的记录就是查找那些在“多”方表中没有对应记录的
“一”方表中的记录。
【 例 5-4】 利用“不匹配项查询向导”,将在“学生成绩表”
中没有考试成绩的学生基本信息显示出来。其数据表视图如图 5-18所示图 5-18,没有考试成绩的学生信息”数据表视图
( 1)打开“学籍管理数据库”,单击工具栏中 【 新建 】 按钮。
( 2)在如图 5-2所示“新建”对话框中,选择查找重复项查询向导,然后单击 【 确定 】 按钮,出现如图 5-19所示的“查找不匹配项查询向导”对话框一。
图 5-19,查找不匹配项查询向导”对话框一
( 3)为查询选择数据的来源。本例中,选择“学生信息表”,然后单击 【 下一步 】 按钮,出现如图 5-20所示的“查找不匹配项查询向导”对话框二。
图 5-20,查找不匹配项查询向导”对话框二
( 4)选择与“学生信息表”相关的表,“学生成绩表”,
然后单击 【 下一步 】 按钮,打开如图 5-21所示的“查找不匹配项查询向导”对话框三。
图 5-21,查找不匹配项查询向导”对话框三
( 5)在对话框三中选择两个表或查询中的共有信息 ——匹配字段。在此例中选择“学生 ID”,单击 【 下一步 】 按钮,
打开“查找不匹配项查询向导”对话框四,如图 5-22所示。
图 5-22,查找不匹配项查询向导”对话框四
( 6)选择最终查询结果中所需包含的字段:“学生 ID”、“姓名”、“系”和“专业”等。单击 【 下一步 】 按钮,打开“查找不匹配项查询向导”对话框五,如图 5-23所示。
( 7)为查询指定标题,并默认选择“查看结果”,单击 【 完成 】 按钮,完成查询的创建过程。得到如图 5-18所示的数据表视图,图中显示所有不匹配记录(没有考试成绩的学生记录)。
图 5-23,查找不匹配项查询向导”对话框五BACK
5.3 用设计视图创建和修改查询
5.3.1 用设计视图创建查询
查询向导可以使用户很方便快速地创建查询,其方法简单,操作方便,但是不够灵活,而且查询向导只能生成一些简单的查询,对于要求较复杂的查询,往往使用起来不太方便。使用设计视图可以自行设置查询条件,创建基于单表或多表的不同选择查询。在设计视图中既可以创建如“选择查询”之类的简单查询,又可以创建如“参数查询”之类的复杂查询。在查询设计网格中,既能够增加、移动、插入和删除字段,也能够设置准则和排序次序,计算总计和平均值等。
选择查询是指查询一个以上的表,将所要显示的部分或全部字段,按某些条件列出结果。
【 例 5-5】 在“学籍管理数据”中,建立一个“学生成绩”
选择查询。该查询中包含“学生信息表”中的“姓名”、
“专业”。“学习成绩表”中的字段“成绩”及“学习课程表”中的字段“课程名称”。它的数据表视图如图 5-24
所示。
图 5-24,学生成绩”数据表视图
( 1)打开相应的“学籍管理数据库”,单击对象栏的 【 查询 】 按钮,如图 5-2所示。双击“在设计视图中创建查询”;
或者单击“数据库”窗口工具栏中的 【 新建 】 按钮,选择
“设计视图”,单击 【 确定 】 按钮,系统将弹出如图 5-25所示的查询设计视图,在此设计视图上显示一个“显示表”对话框。
图 5-25 选择查询设计视图一
( 2)添加表。在“显示表”对话框中,单击建立查询所需的表(若要添加多个表,可以按住 〈 Ctrl〉 键,同时选择多个表)。选择“学生信息表”,单击 【 添加 】 按钮,将表添加到查询对话框中,再选择“学生成绩表”,然后单击 【 添加 】
按钮。最后添加“学习课程表”,如图 5-26所示,选择的表显示在视图的上半部分。选择完毕,单击 【 关闭 】 按钮关闭显示表。
选择完毕,单击 【 关闭 】 按钮关闭显示表。所有加入的表都会显示在关系窗口中,从中可以看到各个表之间的关系。
图 5-26 选择查询设计视图二
( 3)选择字段。在视图下半部分的查询设计网格中(用于指定查询的字段和查询条件等信息),可以选择所要显示的字段。
1)单击查询设计网格左上角第一个“字段”方格上的按钮,
弹出一个下拉列表框,其中显示出所选表名及其全部字段名,
如图 5-27所示。
图 5-27 选择查询设计视图三
2)在下拉列表中选择需要的字段“学生信息表:姓名”。
3)按相同的方法,在右边的方格中依次选择其他所需字段,
如图 5-28所示。(或者可以在视图上部的表中,单击字段列表中的某一字段,然后将其直接拖动到“查询设计网格”中;
还可以通过双击关系窗口中表的字段,将其显示在设计栏的窗口中)。
图 5-28 选择查询设计视图四
( 4)查看数据表视图。单击工具栏中的“执行”按钮,单击工具栏上的“视图”按钮,将其切换到“数据表”视图,
可得结果如图 5-24所示。
( 5)保存查询。单击工具栏中的“保存”按钮,这时出现
“另存为”对话框,如图 5-29所示,在“查询名称”框中,
输入查询名称“学生成绩”,然后单击 【 确定 】 按钮。
图 5-29,另存为”对话框
5.3.2 在设计视图中编辑字段
在查询设计视图中,用户可以在原有的查询基础上增加和删除字段,或者是通过移动字段的方法改变字段的顺序。
在数据库窗口中,单击对象栏中“查询”选项卡,并单击选取所需要修改的查询。在查询设计视图中打开所要编辑的查询“学生成绩”,如图 5-28所示。
1.增加字段
在查询设计视图中增加一个或多个字段的方法如下:
( 1)如果需要一次增加多个字段,按下 〈 Ctrl〉 键的同时在
“关系”窗口的字段列表中单击选取多个字段,然后直接用鼠标拖到需要添加的字段单元格上。
( 2)如果想一次把整个表中的字段加进查询,可以简单地将图 5-28中所示字段列表中代表所有字段的星号拖到合适的位置。
2.删除字段
( 1)在查询设计视图的设计网格中,单击所要删除的字段列,
或按下 〈 Shift〉 键单击以选取多个字段,如图 5-30所示。
( 2)按 〈 Delete〉 键或选择“编辑”菜单中“删除列”命令。
3.移动字段
在查询设计视图的设计网格中,选取所要移动的一个或多个字段,如图 5-30所示。将它们拖动到合适的位置即可。
图 5-30 选取多个删除字段列
4.修改字段
( 1)在图 5-28所示设计视图中将光标移动到所要修改的字段“专业”上。
( 2)单击工具栏中“属性”按钮,系统将弹出“字段属性”
对话框,如图 5-31所示。
( 3)在“字段属性”对话框的“常规”选项卡中的“标题”
文本框中输入字段的标题“所学专业”。
图 5-31,字段属性”对话框
( 4)关闭“字段属性”对话框,将其切换到数据表视图,
可得结果如图 5-32所示。
图 5-32 修改字段后的数据表
5.调整设计网格的列宽
( 1)在设计网格中,将鼠标移动到所需要调整列宽的字段的选择器的右边框线上,这时鼠标指针会变成双箭头状。
( 2)按下鼠标左键并左右拖动,将列调整到合适位置。也可在这时双击鼠标,系统会自动调整该字段列宽。
将经过编辑修改后的查询保存即可。
5.3.3 在查询中进行排序
Access允许用户对“文本”、“数字”和“日期 /时间”
等类型的字段进行排序。
1.单字段排序
【 例 5-6】 建立“教材价格”查询,将查询结果按照字段
“单价”的升序排列次序。其数据表视图如图 5-33所示。
图 5-33,教材价格”查询的排序结果
( 1)在设计视图中建立“教材价格”查询,如图 5-34所示。
图 5-34,教材价格”查询设计视图
( 2)设置排序。单击“单价”字段的“排序”单元格,这时右边出现一个下前头。单击下箭头,打开下拉列表,然后从列表中选择一种排序方式:升序或降序。这里选择“升序”,如图 5-35所示。
切换至“数据表视图”,得到结果如图 5-33所示。
图 5-35 选择排序方式
2.多字段排序
按照多个字段进行排序时,Access首先按照第一个字段排序,当第一个字段的值相同时,再按下一个字段排序。所以应将排序的字段按次序先后,由左至右放置。
【 例 5-7】 在 【 例 5-6】 的基础上,先按照“出版时间”的降序排序,再按照“单价”的升序排序。其数据表视图如图
5-36所示。
图 5-36 经多字段排序的“教材单价”数据表视图
在图 5-35中,将“单价”按选择升序排列后,再单击“出版时间”字段的“排序”单元格,选择降序排列。
将此设计视图切换为数据表视图,得到结果如图
5-36所示。
5.3.4 在选择查询中设置准则
,准则”是指在查询中用来限制检索记录的条件表达式。
它是算术运算符、逻辑运算符、常量、字段值和函数等的组合。通过设置准则可以在查询中滤掉很多不需要的数据。
1.简单准则表达式
有字符型、数字型和表示空字段值的准则表达式。
( 1)字符型。例如:“金山词霸”表示字段值等于“金山词霸”的字符串。,*金山 *”表示其中含有“金山”两字的任何字符串。“金?”表示只有两个字而且第一个字是“金”
的所有字符串。“金 #山”表示第一个字符为“金”第三个字符为“山”,第二个字符为任意数字的字符串。
( 2)数字型。例如:,25”可以表示数字 25,25元钱或是编号 25。,21*3-5”则与表达式,58”等价。
( 3)表示空字段值。例如:,IsNull”或“为空”表示为空白的字段值。,IsNotNull”或“为非空”表示不为空白的字段值。
2.含操作符的准则表达式
操作符主要有比较操作符、字符串运算操作符和逻辑操作符。
( 1)比较操作符,见表 5-1。
运 算 符 含 义 运 算 符 含 义
> 大于 <= 小于等于
>= 大于等于 <> 不等于
< 小于 = 等于
Between…And 在两者之间表 5-1 比较操作符例如:,<=50”表示字段值小于等于 50。,<2000-1-1”表示日期在 2000年 1月 1日以前。,Between 2000-1-1 And 2000-5-1”
表示日期在 2000年 1月 1日~ 2000年 5月 1日之间。
( 2)字符串运算操作符,见表 5-2。
操 作 符 示 例 说 明
Like Like"清华 " 限制字符串只能以“清华”两个字开头
In In( "计算机 ","电子 ") 限制字符串只能是“计算机”或“电子”
Right Right( [书名 ],2)= "教程 " 限制“书名”字段值的最后两个字只能是,教程”
Len Len( [姓名 ])>Val( 2) 限制“姓名”字段值的长度必须是大于 2个字符表 5-2 字符串运算操作符
( 3)逻辑操作符,见表 5-3。
操作符 形 式 含 义
And <表达式 1>And<表达式 2> 限制字段值必须同时满足 <表达式1>和 <表达式 2>
Or <表达式 1>Or<表达式 2> 限制字段值只要满足 <表达式 1>和<表达式 2>中的一个即可
Not Not<表达式 > 限制字段值不能满足 <表达式 >的条件表 5-3 逻辑操作符例如:,>20 and <50”表示字段值只能在 20~ 50之间。
,not >=2000-1-1”表示字段值不能在 2000年 1月 1日以后的。
【 例 5-8】 在“学习课程查询”的基础上,指定一个查询准则为“学习课程查询,出版社 =清华大学出版社”(只有符合上述条件的记录才被查询出来),命名为“清华出版教材”,结果如图 5-37所示。
图 5-37 选择查询 ——“清华出版教材”
( 1)设置查询准则。在设计视图中打开“学习课程查询”,
如图 5-38所示。选择字段“出版社”,单击此列和“条件”
行交叉的单元格,输入,=清华大学出版社”。
切换为数据表视图,系统会显示所有出版社是“清华大学出版社”的教材,如图 5-37所示。
图 5-38 设计视图设置查询准则
( 2)保存查询。设计完毕,单击“文件”菜单中“另存为”
命令,出现如图 5-39所示的对话框,在其中输入查询名称
“清华出版教材”,保存该查询。
图 5-39 另存为“清华出版教材”
3.使用表达式生成器
为了方便初级用户,Access 2002数据库系统提供了一个表达式生成器的工具,它可以用来设置准则。表达式生成器集成了 Access数据库系统的许多功能函数,方便用户调用,甚至只要单击几下鼠标就可以完成准则表达式了。
【 例 5-9】 在“学习课程查询”的基础上,将一年之内出版的教材记录显示出来,结果如图 5-40所示。
图 5-40 一年之内出版的教材
( 1)在查询设计视图中打开“学习课程查询”。
( 2)将光标移动到设计网格中“出版时间”字段的条件单元格中。
( 3)单击工具栏中“生成器”按钮 。
( 4)在如图 5-41所示的“表达式生成器”对话框中,单击操作符按钮中的 【 >】 按钮。
图 5-41,表达式生成器”对话框
( 5)双击第一个列表框中“函数”列表项,再单击选取
“内置函数”列表项。
( 6)在第二个列表框中,单击选取“日期 /时间”列表项。
( 7)在第三个列表框中,双击,Date”列表项。 Date()函数是用来获得当时的日期。
( 8)单击操作符按钮中 【 -】 按钮。
( 9)输入数字,365”,整个表达式如图 5-41中所示。
( 10)单击 【 确定 】 按钮,关闭“表达式生成器”对话框。
将设计视图切换到数据表视图,如图 5-40所示。将一年之内出版的教材记录显示出来。最后关闭查询设计视图,也可单击 【 否 】 按钮放弃对查询的修改。
BACK
5.4 高级查询
相对于其他类型的数据库来说,Access的查询功能比较强大。除了前面所介绍的基本查询功能以外,Access还可以运行更高级的查询。
5.4.1 在查询中执行计算
查询除了可以用来在各个表中按用户的需要收集数据外,
还可以通过查询对数据运行计算操作。其中包含求和、计数、
最大值、最小值、平均值、标准偏差以及其他类型的计算。
在查询中使用函数,可以对查询中一组记录中的数据进行合计计算。包含计算一组记录的合计、求最大值、最小值,
求平均值或总和等,能够使用的函数如表 5-4所示。
函 数 名 功 能
Sum 计算一组记录中某字段值的总和
Avg 计算一组记录中某字段值的平均值
Min 计算一组记录中某字段值的最小值
Max 计算一组记录中某字段值的最大值
Count 计算一组记录中记录的个数
StPev 计算一组记录中某字段值的标准偏差
Var 计算一组记录中某字段值的方差值
First 一组记录中某字段的第一个值
Last 一组记录中某字段的最后一个值
Expression 创建一个由表达式产生的计算字段
Where 设定分组条件以便选择记录表 5-4 几种函数
其中,,Count”函数适用于任何数据类型。,Max”、
,Min”、,First”和,Last”函数适用于除了,OLE对象”、
“超级链接”和“查阅向导”以外的所有数据类型。
,Sum”、,Avg”、,StPev”、和,Var”函数只适用于“数字”、“日期 /时间”、“货币”和“自动编号”数据类型。
另外,组合框中还有以下三个选项:
( 1) Group By:该选项表示以该字段的值来分组。
( 2) Expression:该选项表示该字段是一个用于计算的字段。
( 3) Where:用来指定不用于分组的字段准则。如果选择该选项,Access数据库系统将清除“显示”复选框,在查询结果表中隐藏该字段。
【 例 5-10】 在“学习成绩”查询中按照成绩进行总计并排序,其数据表视图如图 5-42所示。
( 1)在设计视图中打开“学习成绩”查询,如图 5-28所示。图 5-42 数据表视图
( 2)单击工具栏中的“合计”按钮。
( 3)在“姓名”字段的总计单元格中选取,Group by”选项。
图 5-42 数据表视图
( 4)在“单价”字段的总计单元格中选取,Sum”选项,并在排序单元格中选择“降序”选项。在“课程名称”的总计单元格中选取,count”,如图 5-43所示。
单击工具栏中“数据表视图”按钮,查询结果如图 5-42
所示。
图 5-42 数据表视图
5.4.2 创建参数查询
参数查询一般作为窗体或报表的基础,从而使窗体只显示或打印符合用户输入参数的记录。它一般创建在选择查询的基础上,在进行查询时会出现一个或多个对话框,要求输入查询条件,之后查询按照这些条件将符合的记录列出。这样在查询的过程中交互性更强,查询也更灵活。
【 例 5-11】 创建一个参数查询,要求输入姓名才能查看其成绩,如图 5-44所示出现一个对话框。
图 5-44 输入查询条件
( 1)在设计视图中打开“学习成绩”查询,如图 5-28所示。
( 2)在需要输入参数的字段“姓名”对应的“条件”单元格中输入查询准则,即带有方括号,[ ]”的文本,,[请输入姓名 ]”文本在参数查询中显示出来,如图 5-45所示。
图 5-45 输入查询准则
( 3)若要输入的参数表达式比较长,可在“条件”单元格上单击鼠标右键,并选择快捷菜单中“显示比例”命令,系统弹出如图 5-46所示“显示比例”对话框,用户可以在其中输入表达式,然后单击 【 确定 】 按钮,表达式会自动出现在相应单元格中。
( 4)重复步骤( 2)和( 3),为所有需要通过对话框输入的字段加入带参数的准则。
图 5-46,显示比例”对话框
( 5)输入参数值。单击工具栏中“数据表视图”按钮,
系统将弹出如图 5-44所示的“输入参数值”对话框。输入参数值,然后单击 【 确定 】 按钮。即可显示相应的查询结果。如果输入参数不符合要求,则无法打开查询表。
( 6)如果想修改参数查询,在设计视图中打开相应的查询,从“查询”菜单中选择“参数”命令,弹出如图
5-47所示对话框。在对话框的参数列中,可以直接输入参数名,这时不用加方括号。在数据类型中,可以打开下拉列表,从中选择字段类型。同样可以设置多个参数进行查询。
图 5-47,查询参数”对话框
5.4.3 创建操作查询
操作查询是在查询的过程中在数据库中完成一定的操作,
使用户可以根据自己的需要,利用查询创建一个新的数据表以及对数据表中的数据进行增加、删除和修改等操作。
操作查询共有四种类型:生成表查询、更新查询、追加查询和删除查询。所有查询都将影响到表,其中,生成表查询在生成新表的同时,也生成新表数据。而删除查询、更改查询和追加查询只修改表中的数据。
创建操作查询应首先创建选择查询,然后将查询类型设置为需要的操作类型。通过创建操作查询,可以更加有效地管理表中的数据。例如,删除不需要的记录、更新旧的记录等。
1.创建生成表查询
通过生成表查询,可以将一个或多个表中的全部或部分数据创建成一个新表,也可以认为是将查询结果保存为数据库中的一个新表。生成表查询所创建的表继承源表的字段数据类型,但并不继承源表的字段属性及主键设置。
生成表查询可以应用在很多方面,可以创建用于导出到其他 Access数据库的表、表的备份副本以及包含旧记录的历史表等。
【 例 5-12】 创建生成表查询,只显示课程名称和其学时数,其数据表视图如图 5-48所示。
图 5-48,学时”生成表的数据表视图
( 1)使用设计视图创建一个查询,其数据来源是“学习课程表”。
( 2)如图 5-49所示,从“查询”菜单中选择“生成表查询”,或单击工具栏中的“查询类型”按钮,从其中选择
“生成表查询”。
图 5-49 选择“生成表查询”
弹出如图 5-50所示的“生成表”对话框。
图 5-50,生成表”对话框
( 3)在“生成表”对话框中输入新表名称“学时”,并将新表建立在“当前数据库”中,单击 【 确定 】 按钮。
( 4)选择“课程名称”和“学时数”作为新表的字段,如果想设置查询的属性,可以在“设计视图”的窗口内单击鼠标右键,从中选择“属性”;或从工具栏中选择“属性”按钮。进入属性设置窗口,如图 5-51所示。
图 5-51 设置查询属性
( 5)切换到数据表视图预览其结果,如图 5-48所示。
( 6)单击工具栏上的“运行”按钮。执行生成表查询,系统显示一个消息框,询问是否要生成一个新表,如图 5-52所示。单击 【 是 】 按钮,系统开始生成表。
图 5-52 消息框
按 〈 F11〉 键切换到数据库窗口,单击“表”对象,如图 5-53所示。可以看到多出一个新建表“学时”。打开该表,
如图 5-48所示。
图 5-53 生成新表
2.创建更新查询
利用更新查询,可以从一个表或查询中查找符合条件的一组记录并修改数据。
【 例 5-13】 创建一个更新查询,将“学习课程表”中在学时数在 50以下的 50,其数据表视图如图 5-54所示。
图 5-54 更新记录后的“学习课程表”
( 1)在设计视图中打开“学习课程查询”,如图 5-38所示。
( 2)从“查询”菜单中选择“更新查询”,或单击工具栏中的“查询类型”按钮,从其中选择“更新查询”。设计视图中多出“更新到”选项,而“排序”和“显示”行消失了,
表明系统处于设计更新查询的状态,如图 5-55所示。
图 5-55 更新查询
( 3)在需要更新的字段“学时数”中填入更新值,50”和更新条件,<50”。切换到数据表视如图 5-56所示,可以看到所有符合条件的记录。
( 4)单击工具栏中“保存”按钮,以“更新查询”的名字保存此查询。
( 5)单击工具栏上的“运行”按钮,执行“更新查询”,
系统显示一个消息框,询问是否要进行更新,如图 5-57所示。
单击 【 是 】 按钮,系统开始更新。
然后返回到对象栏中,重新打开“学习课程表”,结果将如图 5-54所示。
图 5-56 需要更新的记录 图 5-57,更新查询”消息框
3.创建追加查询
通过创建追加查询,可以将一个表的经过选择的信息插入到另一个已存在的表中。
追加查询必须事先建立好新表,而生成表查询会自动建立表,如果表已存在,会先删除后再建立新表。
【 例 5-14】 建立一个追加查询,把清华出版教材追加到北航出版社出版的教材表中,数据表视图如图 5-58所示。
图 5-58 追加记录后的数据视图
( 1)利用“生成表查询”生成一个新表“北航出版社”,
如图 5-59所示。
图 5-59,北航出版社”数据表视图
( 2)在设计视图中打开查询 ——“清华出版教材”,选择“追加查询”命令,系统弹出如图 5-60所示的“追加”对话框。
在对话框中,为追加查询选择所要追加到的表“北航出版社”,单击 【 确定 】 按钮。
图 5-60,追加”对话框
( 3)如图 5-61所示,在“追加到”单元格中选择将查询结果表中的信息追加到表中的相应字段中。
( 4)将此查询另存为“追加查询”。
图 5-61 追加查询设计视图
( 5)单击工具栏上的“运行”按钮,执行“追加查询”,
系统显示一个消息框,询问是否要进行追加,如图 5-62所示。单击 【 是 】 按钮,系统开始追加。
然后返回到对象栏中,重新打开表“北航出版社”,结果将如图 5-58所示。
图 5-62,追加查询”消息框
4.创建删除查询
通过创建删除查询,可以从一个或多个表中删除所有满足条件的记录。
【 例 5-15】 使用“删除查询”,删除 【 例 5-13】 的表“北航出版社”中“出版时间”小于 2000年的一组记录,其数据表视图如图 5-63所示。
图 5-63 删除记录后的表
( 1)在设计视图打开“北航出版社”的选择查询,选择
“删除查询”命令,此时,设计视图中增加“删除”选项,
“排序”和“显示”选项消失。在字段“出版时间”的“条件”单元格中输入,<=2000-1-1”,如图 5-64所示。
图 5-64,删除查询”设计视图
( 2)将此查询另存为“删除查询”。
( 3)单击工具栏上的“运行”按钮,执行“删除查询”,
系统显示消息框询问是否要进行删除操作,如图 5-65所示。
返回到对象栏中,重新打开表“北航出版社”,结果将如图 5-63所示。只显示出版时间在 2000年以后的教材信息。
图 5-65,删除查询”消息框
5.4.4 SQL查询
SQL即结构化查询语言,它是使用关系模型的数据库应用语言。 SQL查询是直接使用 SQL语句执行查询任务,创建结果化查询。 Access中所有的查询都可以认为是一个 SQL查询。建立其他查询提供的各种工具,都是不用手工输入 SQL语句,而由系统自动生成。
SELECT语句的语法格式为:
SELECT [ALL|DISTINCT] select_list
[INTO[new_table_name]]
[FROM{table_name|view_name}[(optimizer_hints)]
[[,{table_name2|view_name2}[( optimizer_hints)]
[…,{table_name6|view_name6}[( optimizer_hints)]]]
[WHERE clouse]
[GROUP BY clause]
[HAVING clause]
[ORDER BY clause]
[COMPUTE clause]
[FOR browse]
格式中带有,[ ]”的项表示可选项,大写的词为关键字,
小写的词表示不确定的实体名称。除第一行外,每一行为一个子句。在 SELECT中,子句可以省略,但在列出时,必须按照以上顺序。
1.创建 SQL查询
【 例 5-16】 创建一个 SQL查询 ——“图书”,如图 5-66所示。
( 1)打开“学籍管理数据库”窗口,双击“在设计视图中创建查询”,或依次选择“查询” →,新建” →,设计视图”。
( 2)单击“显示表”中的 【 关闭 】 按钮,关闭其对话框。
图 5-66 SQL查询结果的数据表视图
( 3)单击工具栏上的“切换视图”按钮,将视图改为 SQL
视图,如图 5-67所示。
图 5-67 SQL视图
( 4)在上述 SQL视图中输入 SQL语句:
SELECT [学习课程表 ].[教材名称 ],[学习课程表 ].[作者 ],[学习课程表 ].[出版时间 ],[学习课程表 ].[单价 ]
FROM 学习课程表
WHERE (((学习课程表,出版时间 )>=#1/1/2000#) AND ((学习课程表,单价 )>30))
ORDER BY [学习课程表 ].[单价 ] DESC;
这段 SQL语句的作用是:从“学习课程表”表中选择字段
“教材名称”、“作者”、“出版时间”和“单价”,将“出版时间”在 2000年 1月 1日之后,“单价”大于 30的记录检索出来,再按“单价”的降序排列。
( 5)切换到设计视图查看,如图 5-68所示 。
( 6)切换到数据表视图。通过数据表视图预览其结果,检查是否为所需要的记录列表。如果预览到的一组记录不符合要求,重新切换到 SQL视图,更改 SQL查询设置。
( 7)在 SQL视图中,单击工具栏上的“运行”按钮,可得到如图 5-66所示的结果,并可单击工具栏中的“保存”按钮将其保存。
图 5-68 查询设计视图
2.联合查询
使用联合查询,可以将两个或多个表或查询中的字段合并到查询结果的一个字段中,即可以合并两个表中的数据。
联合查询由若干 SELECT语句组成,在每个 SELECT语句之间用 UNION(不返回重复记录)或 UNION ALL(返回重复记录)连接。
【 例 5-17】 建立一个联合查询,分别取出“学生信息表”中“姓名”和“系”
字段,“
学习课程表”中“作者”
和“出版社”字段,将其合并,结果如图 5-69所示。
图 5-69 联合查询的结果
( 1)在数据库窗口中,新建一个“设计视图”,并关闭
“显示表”中的对话框。
( 2)选择“查询”菜单中的,SQL特定查询”中的“联合”
命令。
( 3)在如图 5-70所示的 SQL视图中,输入 SQL语句:
图 5-70 联合查询的 SQL视图
SELECT [姓名 ],[系 ] FROM
学生信息表
UNION
SELECT [作者 ],[出版社 ]
FROM 学习课程表 ;
( 4)单击工具栏上的“视图”按钮,切换到数据表视图进行图预览,进行修改并确定最后的 SQL语句
( 5)单击工具栏中的“运行”按钮,得到如图 5-69所示的数据表视图。并可单击工具栏中“保存”按钮将其保存。
3.传递查询
传递查询使用服务器能接受的命令直接将命令发送到
ODBC中,因此只有在服务器环境中,具有数据源才可以实现传递查询。
例如,可以使用传递查询来检索记录或更改数据。使用传递查询,可以不必链接到服务器上的表而直接使用它们。这种查询可形成 SQL Server的动态数据请求。
创建传递查询的操作步骤如下:
( 1)在数据库窗口中,新建一个“设计视图”,并关闭
“显示表”中的对话框。
( 2)选择“查询”菜单中的,SQL特定查询”中的“传递”
命令。
( 3)在如图 5-71所示的 SQL视图中,输入 SQL语句,例如:
SELECT [姓名 ],[性别 ] FROM
学生信息表
UNION
SELECT [课程名称 ],[作者 ]
FROM 学习课程表 ;
图 5-71 传递查询的 SQL视图
( 4)单击工具栏上“属性”按钮,在显示的“查询属性”
对话框中,如图 5-72所示,设置,ODBC连接字符串”属性,
用于指定要连接的数据库信息 ——单击此栏右边的“生成器”按钮。
图 5-72 设置“查询属性”
( 6)单击 【 确定 】 按钮。设置结果如图 5-74所示。(如果在此属性框中,没有指定连接串,或者删除了已有的字符串,Access将使用默认字符串,ODBC;”,使用此设置时,Access将在每次运行查询时提示连接信息。)
图 5-73,选择数据源”对话框
( 7)单击工具栏上的“运行”按钮即可。
图 5-74,查询属性”对话框
4.数据定义查询
数据定义查询就是所说的临时表,利用它可以创建、
更改或删除数据库中的表,或者在当前的数据库中创建索引。
【 例 5-18】 创建一个新表“学生”,表中包括“学生 ID”、
“姓名”、“出生日期”、“电话”和“备注”五个字段,
并将“学生 ID”定义为主键,如图 5-75所示。
图 5-75 数据定义查询的数据视图
( 1)在数据库窗口中,新建一个“设计视图”,并关闭
“显示表”中的对话框。
( 2)选择“查询”菜单中的,SQL特定查询”中的“数据定义”命令。
( 3)在如图 5-76所示的数据定义查询 SQL视图中,输入
SQL语句:
“CREATE TABLE 学生
([学生 ID] interger,
[姓名 ] text,
[出生日期 ] date,
[电话 ] text,
[备注 ] memo,
CONSTRAINT [Index1]
PRIMARY KEY([学生 ID]));”
图 5-76 数据定义查询的 SQL视图
( 4)单击工具栏上的“运行”按钮,在数据库窗口中,可以看到新建的“学生”表。打开该表,可以看到如图 5-75所示的结果。
BACK
5.5 查询应用实例
【 例 5-19】 在“学籍管理数据库”中,建立一个基于多表的查询“学生课程成绩查询”。该查询中包括:“学生信息表”中的“学生 ID”、“姓名”;“学生成绩表”中的
“课程编号”、“学期”、“成绩”;“学习课程表”中的“课程名称”等字段。然后在此表中增加一个“系”字段;最后对“学期”字段进行升序排序,并对“成绩”字段进行降序排序。所得数据表视图如图 5-77所示。
图 5-77 基于多表的“职工工资查询”
( 1)在设计视图中打开“学籍管理数据库”,将“学生信息表”、“学生成绩表”和“学习课程表”添加到“查询”
对话框中,如图 5-78所示。然后关闭“显示表”。
图 5-78 添加查询表
( 2)在“字段”列表中单击所需要的字段,然后将其直接拖动到“查询设计网格”中;或者通过双击“关系”窗口中表的字段,将其显示在设计栏的窗口中,如图 5-79所示。
图 5-79 添加所需字段
在数据表视图中查看查询,如图 5-80所示。
图 5-80 查询的数据表视图
( 3)切换回到设计视图 5-79中,将光标放置在空白字段处,
在“关系”窗口的“字段”列表中单击“学生信息表:系”
字段,如图 5-81所示,将其添加在设计视图中。
图 5-81 添加字段
( 4)单击“学期”字段的“排序”单元格,单击其右边下箭头,打开下拉列表,然后从列表中选择排序方式:升序。
按照此方法将“成绩”字段的“排序”设置为降序,如图 5-
82所示。
( 5)切换到数据表视图进行查看,可得到如图 5-77所示的查询结果。
图 5-82 选择排序方式
BACK
5.6 习题
1.填空题
( 1)数据库的真正优点是具有很强的 ________和
_________的能力,用户利用查询既可以检索符合特定条件的存储于表中的数据,也可以通过查询向表中添加数据。
( 2)利用查询,可以完成以下功能,_______________、
_____________,_____________、
______________,_______________、
_______________,_______________。
( 3) 可以计算并重新组织数据的结构,从而更方便地分析数据。
2.思考题
( 1)查询有哪些类型?各有什么作用?
( 2)查询向导有什么优缺点?
( 3)操作查询的作用是什么,它有哪些类型?
BACK