第5章access数据库查询设计方法.ppt
第5章 Access查询设计方法理解Access查询对象的作用及其实质了解SQL语言的基本知识掌握Access查询对象的设计方法学习Access查询对象的应用结合“教材征订管理信息系统”数据库应用系统设计所需要的Access查询对象第5章 Access查询设计方法查询是Access数据库中的一个重要对象,一个Access查询对象不是数据的集合,而是操作的集合。Access查询是针对数据源的操作命令,相当于程序。根据其应用目标的不同,可以将Access的查询对象分为四种不同的类型:选择查询 生成表查询 追加查询 删除查询 第5章 Access查询设计方法在Access中,查询的实现可以通过两种方式进行:一种是在数据库中建立查询对象另一种是在VBA程序代码或模块中使用结构化查询语言(SQLStructured Query Language)。本章介绍Access查询对象的基本概念、操作方法和应用方式,讲解SQL的基本知识,并分析Access查询对象与SQL的关系。第5章 Access查询设计方法应用Access的查询对象是实现关系数据库查询操作的主要方法,借助于Access为查询对象提供的可视化工具,不仅可以很方便地进行Access查询对象的创建、修改和运行,而且可以使用这个工具生成合适的SQL语句,直接将其粘贴到需要该语句的程序代码或模块中。这将非常有效地减轻编程工作量,也可以完全避免在程序中编写SQL语句时很容易产生的各种错误。Access查询对象的类型非常丰富,可以分为七个类别,分别称为“选择查询”、“交叉查询”、“生成表查询”、“更新查询”、“追加查询”和“删除查询”。其中“选择查询”的应用最为广泛。所以说,Access查询对象完全可以满足一般数据库应用系统的查询需求,也几乎涵盖了SQL所有语句的生成需求。5.1 认识Access查询对象一个Access查询对象实质上是一条SQL语句,而Access提供的查询设计视图实质上是提供了一个编写相应SQL语句的可视化工具。在Access提供的查询设计视图上,通过直观的操作,可以迅速地建立所需要的Access查询对象,也就是编写一条SQL语句,从而增加了设计的便利性、减少了编写SQL语句过程中可能出现的错误。5.1.1 创建Access查询对象的方法1新建Access查询对象的操作在Access数据库设计视图中,单击“查询”标签按钮即进入“查询对象”选项卡,如图5-1-1所示。图5-1-1 数据库设计视图中的“查询对象”选项卡5.1.1 创建Access查询对象的方法单击数据库设计视图上的“新建”按钮“”,即弹出“新建查询”对话框,如图5-1-2所示。图5-1-2 “新建查询”对话框5.1.1 创建Access查询对象的方法在“新建查询”对话框中,可以从Access提供的五种查询对象新建方法中选择一种。在新建查询对话框中选择“设计视图”选项,然后单击“确定”按钮“”,即进入“查询设计视图”。由于是新建查询,所以在查询设计视图中没有任何内容。在查询设计视图中新建查询对象的第一步操作是指定数据源,因此,一旦由“新建查询”对话框进入查询设计视图,Access首先在查询设计视图中弹出“显示表”对话框,提示操作者指定数据源。这时,操作者需要在“显示表”对话框中逐个地指定数据源,并单击“添加”按钮“”,将指定的数据源逐个添加入查询设计视图上半部的数据源显示区域内。5.1.1 创建Access查询对象的方法例如,在“教材征订管理信息系统”数据库中需要设计一个名为“课堂信息查询”的Access查询对象。如图5-1-3示。图5-1-3 “显示表”对话框的操作5.1.1 创建Access查询对象的方法Access查询对象的数据源可以是若干个表,也可以是已经存在的某些查询,还可以是若干个表与某些查询的组合。与此对应,“显示表”对话框中包含三个选项卡:“表”、“查询”、“表和查询”。应该根据实际需要进行适当的选择。新建查询对象的第二步操作是定义查询字段,也就是从选定的数据源中选择需要在查询中显示的数据字段。既可以选择数据源中的全部字段,也可以仅选择数据源中的部分字段,且各个查询字段的排列顺序可以与数据源中的字段排列顺序相同,也可以与数据源中的字段排列顺序不同。这一步操作可以通过两种方法完成。5.1.1 创建Access查询对象的方法(1)新建包含数据源全部数据字段的查询将数据源表中的“”符号拖曳至设计视图下部的“字段”行中;或下拉“字段”行的列表框,从中选取“”符号。这时,“字段”行中即出现“”符号,“表”行中出现该字段所在的表名,“显示”行中的复选框中出现“”符号。这个新建查询对象的操作也就完成了。如此方式建立的查选对象在其运行时,将显示数据源表中所有字段中的所有记录数据。即,符号“”代表着全部字段。对于“课堂信息查询”而言,即可采用如图5-1-4所示方式设计。5.1.1 创建Access查询对象的方法图5-1-4 新建包含数据源全部数据字段查询的操作5.1.1 创建Access查询对象的方法(2)新建包含数据源部分数据字段的查询将数据源表中那些需要显示在查询中的数据字段逐个地拖曳至“字段”行的各列中;或逐个地下拉“字段”行列表框,从中选取需要显示的数据字段。这时,“字段”行中出现选中的字段名,“表”行中出现该字段所在表的表名,“显示”行中的复选框中出现“”(它表明该查询字段将被显示,同时应该看到,取消这个标记则意味着得到了一个不被显示的查询字段)。如此选择查询字段,可以将查询字段的排列顺序设置为不同于数据源中字段的排列顺序,是非常灵活的一种方式。5.1.1 创建Access查询对象的方法例如,对于“课堂信息查询”而言,亦可采用如图5-1-5所示方式设计。在多数情况下,都会采用这种方式设计Access查询。图5-1-5 新建包含数据源部分数据字段查询的操作5.1.1 创建Access查询对象的方法在整个新建查询对象的操作过程中,这个查询对象都将命名为“查询?”。当新建操作完成时,需要关闭查询设计视图,此时将出现“另存为”对话框。应该在“另存为”对话框中为新建查询对象命名为所需要的名字。如图5-1-6示。图5-1-6 在“另存为”对话框中为新建查询对象命名5.1.1 创建Access查询对象的方法2设计修改查询对象的操作对于一个已经新建完成的查询对象,通常都需要对其进行一些设计修改。就需要对以上初步建立的查询对象进行设计修改。为了使某一个字段的数据在其显示时有序排列,可以在查询设计视图中该字段列下的“排序”行下拉其列表框,然后从中选择需要的排序规则。为了使某一个字段的数据在其显示时只出现满足某种条件的数据,可以在查询设计视图中该字段列下的“准则”行中设定筛选准则。5.1.1 创建Access查询对象的方法例如,现需要将如图5-1-5所示的“课堂信息查询”设计为能够按照“课堂编号”由小到大的顺序排列显示。其查询设计参数如图5-1-7所示。图5-1-7 在查询设计视图中设定“排序”5.1.2 Access查询对象的实质创建一个Access查询对象的操作过程,实质上是生成一条SQL语句的过程。为了看到一个查询所对应的SQL语句,可以将查询设计视图转换到SQL视图中来观察。单击查询设计视图中菜单栏上的【视图】|【SQL视图】,即进入SQL视图中。由图5-1-5所示查询设计视图转换到SQL视图中后,所看到的SQL语句如下:5.1.2 Access查询对象的实质SELECT 课堂信息表.课堂编号,课堂信息表.课程代码,课程信息表.课程名称,课堂信息表.专业,课堂信息表.年级,课堂信息表.班级,课堂信息表.人数,课堂信息表.校区,课程信息表.总学时,课堂信息表.周学时,课堂信息表.教学周次FROM 课程信息表 LEFT JOIN 课堂信息表 ON 课程信息表.课程代码=课堂信息表.课程代码ORDER BY 课堂信息表.课堂编号;5.1.2 Access查询对象的实质运行一个Access查询的操作也就是运行相应SQL语句的过程,其结果是生成一个动态数据集合。这个动态数据集合,无论在形式上还是在所能接受的操作上,都如同一个Access表对象。这就是说,在数据表视图中所能进行的所有操作均能在查询视图中实施。如果查询视图数据来源于若干个数据表,则可以在查询视图中同时操作这若干个表中的数据,在一定的限定条件下,也可以同时对这些数据表进行追加记录、删除记录和更改数据的操作。5.1.4 Access查询对象的运行对于一个设计完成的查询对象,可以在数据库视图中的查询对象选项卡上看到它的图标,用鼠标在一个查询对象图标上双击,即可运行这个查询对象。使用一个Access查询对象操作数据就需要令这个查询对象运行,称之为运行查询。一个运行着的查询一般以查询视图的形式显示。例如,为了运行刚刚建立的“课堂信息查询”对象,应该在“教材征订管理信息系统”数据库设计视图的“查询”选项卡上选定“课堂信息查询”对象,并单击打开数据库视图上的“打开”按钮,即可运行“课堂信息查询”对象,其运行视图如图5-1-8所示。5.1.4 Access查询对象的运行图5-1-8 “课堂信息查询”对象运行视图5.2 Access的选择查询在Access所支持的各类查询对象中,选择查询是最常见的查询类型,它从一个或多个的数据源中检索数据,并且允许在可以更新记录(带有一些限制条件)的数据表中进行各种数据操作。也可以使用选择查询来对记录进行分组,并且对记录作总计、计数、平均以及其他类型统计的计算。选择查询的优点在于能将多个表或查询中的数据集合在一起,或对多个表或查询中的数据执行编辑操作。5.2.1 Access查询设计视图选择查询的设计视图如图5-2-1所示,被分为上下两个部分。上部为数据源列表区,显示着查询对象的数据源以及它们之间关联;下部为参数设置区,由五个参数行组成,分别是字段行、表行、排序行、显示行和条件行。在Access查询设计视图中,选择确定多个数据源(表或查询)后,必须保证各个数据源数据间存在必要的联接关系。表与表间的联接如果已在数据库视图中通过建立表间关系形成,则这些关系将被继承在查询设计视图中。如果上述关系不存在,则必须在查询设计视图中指定,如此指定的关系仅在本查询中有效。5.2.1 Access查询设计视图在Access查询设计视图中指定表间关系的操作为:从作为数据源的表或查询字段列表中将一个字段拖到另一个作为数据源的表或查询字段列表中的关联字段(即具有相同或兼容的数据类型且包含相似数据的字段)上。所谓将一个字段拖到另一个字段上,是指用鼠标指向一个字段,然后按住鼠标左键拖曳至另一个字段上,然后放开鼠标左键。使用这种方式进行联接,只有当联接字段的值相等时,Access才会从两个表或查询中选取记录。5.2.1 Access查询设计视图设定完成查询数据源后,应该关闭“显示表”对话框,然后设定查询对象的各个字段。设定一个Access查询字段的操作,可以是逐一用鼠标选中数据源中的字段,并按住鼠标左键不放,然后将其拖曳至查询设计视图下部对应列中的字段行内。例如,“教材征订查询”对象的各个字段设定可参见图5-2-1所示。5.2.1 Access查询设计视图图5-2-1 “教材征订查询”对象的设计视图5.2.2 数据源表联接的意义在图5-2-1中可以看到,由于“教材征订查询”的数据分别取自“教材预订表”、“课程信息表”和“教材征订表”,因此必须指定这三个Access表作为本查询的数据源。Access支持的关联类型有三种:只包含来自两个表的联接字段相等处的行;包括所有“主表”的记录和那些联接字段相等的“从表”的记录;包括所有“从表”的记录和那些联接字段相等的“主表”的记录。在上述三种关联类型中,第一种关联类型是默认类型。“教材征订查询”对象的三个数据源之间均采用第一种联接类型。即只显示在“教材预订表”和“课程信息表”中均存在的、且同时存在于“教材征订表”中的记录。关于这一点,可以通过“教材征订查询”对象的运行视图观察到,如图5-2-2所示。5.2.2 数据源表联接的意义图5-2-2 “教材征订查询”对象的运行视图5.2.3 排序行和显示行的作用1排序行的作用由于一个Access查询对象显示的数据记录往往很多,如果能够令某一列数据有顺序的排列显示,将方便于数据的查看。2显示行的作用在Access查询设计视图中,显示行内是一个单选框。如果希望某一字段的数据在查询运行时得到显示,则在该单选框中单击,使其显示有“”符号,这也是Access的默认参数。5.2.4 Access条件设置及其表达式生成器应用设定条件是设计查询对象时的一项重要操作,主要用于设定某种条件来筛选数据记录。条件必须是一个合法的关系或逻辑表达式。本小节介绍利用向导设定准则的操作方法。在查询设计视图中,令光标停留在需要设定条件的字段中的条件行内,单击Access查询设计视图工具栏上的“向导”工具按钮“”,即弹出“表达式生成器”对话框,如图5-2-3所示。条件的设定可以在这个对话框中操作完成。5.2.4 Access条件设置及其表达式生成器应用例如,我们可以在“教材征订管理信息系统”数据库中设计一个名为“任课教师查询”的对象,其数据源及其查询字段设置如图5-2-3所示。图5-2-3 “任课教师查询”对象的设计视图5.2.4 Access条件设置及其表达式生成器应用现要求在“任课教师查询”运行视图中仅显示“总学时”不少于48学时且不多于56学时的课堂信息,这就需要为“任课教师查询”设置查询条件。为了给“任课教师查询”的“总学时”字段设置条件,可以在“任课教师查询”设计视图中先将光标定位于“总学时”字段的条件行内。然后单击Access查询设计视图工具栏上的“向导”按钮,即刻调出Access“表达式生成器”对话框。5.2.4 Access条件设置及其表达式生成器应用Access“表达式生成器”对话框分为上下两个部分,对话框上部为一个文本框,设定的条件表达式将显示在其中。对话框下部分为三个组合框,自左至右分别为“对象组合框”,显示着可以使用的对象;“子对象组合框”,显示着当前对象中包含的所有子对象;“子对象属性框”,显示着当前子对象的各个属性值。5.2.4 Access条件设置及其表达式生成器应用首先选定“对象组合框”中的“任课教师查询”对象,再在“子对象组合框”中双击“总学时”子对象,即可在Access“表达式生成器”对话框上部的文本框中得到“总学时”字符。然后,在“对象组合框”中选定“操作符”对象,再在“子对象组合框”中选定“比较”子对象,并在“子对象属性框”双击“=”属性值,即可在Access“表达式生成器”对话框上部的文本框中的“总学时”字符后得到“=”字符。接着在Access“表达式生成器”对话框上部的文本框中通过键盘输入字符“48”。即完成了逻辑表达式首部的关系表达式设定。接下来的操作应该依次设定“操作符”对象中“逻辑”子对象中的“And”属性值,“任课教师查询”对象中“总学时”子对象,“操作符”对象中“比较”子对象中的“=48 And 总学时=56);5.3 Access选择查询的应用选择查询是Access支持的多种类型查询对象中最重要的一种,它不仅仅可以完成数据的筛选、排序等操作,更常见的用途还在于它的计算功能、汇总统计功能以及接受外部参数的功能。同时,选择查询还是其他类型查询创建的基础。在后续各节中我们会看到,为了创建其他类型的查询,常常会先建立一个选择查询,然后再逐步进行设计修改,以达到实现相关类型查询的设计结果。5.3.1 Access选择查询的计算功能通过查询操作完成数据源内部或各数据源之间数据的计算操作,是建立Access查询对象的一个常用的功能。完成计算操作是通过在查询对象中设计计算列来实现的,当查询运行时,计算列就如同这个Access查询对象一个字段一样显示。计算列本质上是一个计算表达式,设置计算列的操作可以借助于向导在“表达式生成器”对话框中完成。例如,如图5-2-1所示的“教材征订查询”对象中即包含一个计算列“订购金额”,它将显示“教材征订查询”对象中“教材定价*订购册数*订购折扣”的乘积。为了设置这个计算列,应该首先在“教材征订查询”视图中将光标定位在最后一列的“字段”行上,并单击查询设计视图工具栏上的“向导”工具按钮“”,调用Access“表达式生成器”对话框。5.3.1 Access选择查询的计算功能在这个Access“表达式生成器”对话框中完成计算列的表达式设定。如图5-3-1所示。图5-3-1 应用“表达式生成器”为“教材征订查询”设定计算列5.3.1 Access选择查询的计算功能此外,还可以设定计算列中数据的显示格式。其操作方法是,在需要重新设置显示格式的计算查询列“字段”行处右击鼠标,在随之弹出的快捷菜单上单击【属性】;或令光标停留在需要设置显示格式的计算查询列“字段”行上,在查询设计视图的菜单栏上单击【视图】|【属性】(或单击查询设计视图工具栏上“属性”工具按钮)。即弹出“字段属性”对话框,如图5-3-2所示。在“字段属性”对话框中,即可为所选字段设置包括显示格式在内的各项字段属性。5.3.1 Access选择查询的计算功能例如,可以将“教材征订查询”的“订购金额”计算列的显示格式设置为货币格式。操作界面如图5-3-2所示图5-3-2 “教材征订查询”的“订购金额”计算查询列的设置显示格式5.3.2 Access选择查询的汇总功能Access选择查询的计算功能可用于完成查询对象中相关字段间的数据处理,而如果需要实现查询对象中相关记录间的数据处理,所需要的功能即称为Access选择查询的汇总功能。例如,在“教材征订管理信息系统”数据库的“课堂信息表”中记录着所有课堂信息,每一个课堂由相同专业、相同年级的若干个班级组成,开设同一门课程。如果我们需要统计每一个课堂的学生总人数,就可以使用Access选择查询的汇总功能。这种具有统计功能的查询对象也称为汇总查询。5.3.2 Access选择查询的汇总功能为了实现上述的查询功能需求,应该首先建立一个Access选择查询对象,其查询数据源为“课程信息表”和“课堂信息表”,其查询字段分别为课堂信息表!课堂编号、课程信息表!课程名称、课堂信息表!专业、课堂信息表!年级和课堂信息表!人数。并将其命名为“课堂信息汇总查询”。然后,在Access查询视图中打开“课堂信息汇总查询”,在工具栏上单击“汇总”按钮“”。这时,在查询设计视图下部的参数设置区中将增加一个名为“总计”的行,其间参数均为“分组”。接着,应该将“人数”字段列内的“总计”行参数更改为“总计”。其设计视图形式如图5-3-3所示。5.3.2 Access选择查询的汇总功能图5-3-3 “课堂信息汇总查询”设计视图5.3.2 Access选择查询的汇总功能完成“课堂信息汇总查询”的基本设计后,可以关闭查询设计视图。接着运行“课堂信息汇总查询”,可以看到所希望的功能基本实现了。如图5-3-4所示。图5-3-4 “课堂信息汇总查询”运行视图5.3.3 Access选择查询的参数设置此处所指的参数特指查询条件中使用的表达式,我们将一个具有查询条件的选择查询对象称为参数查询对象。以下,我们以5.3.2节提到的“课堂信息汇总查询”为例说明参数查询对象的应用需求。例如,要求仅显示“计算机科学与技术”专业的课堂汇总信息。因此,“课堂信息汇总查询”的查询条件参数应该依据“专业”字段数据设定,其条件表达式应为:课堂信息表.专业=”计算机科学与技术”5.3.3 Access选择查询的参数设置为了便于比较,可以在数据库设计视图中复制一份“课堂信息汇总查询”对象,并命名为“课堂信息汇总参数查询”。然后,进入“课堂信息汇总参数查询”设计视图,在最后一列处增加一个字段“专业”,并将其“总计”行参数设置为“条件”。一旦将一个查询列的“总计”行参数设置为“条件”,则该查询列的“显示”行参数自动成为“不显示”,切不可以更改。然后,利用Access表达式生成器为这一列的“条件”行设置条件表达式,如图5-3-5所示。设置好参数后,单击“表达式生成器”中的“确定”按钮,即完成了一个Access查询对象的参数设置操作。5.3.3 Access选择查询的参数设置图5-3-5 “课堂信息汇总参数查询”的参数设置5.4 Access的交叉表查询交叉表查询是Access支持的另一类查询对象。交叉表查询显示来源于表中某个字段的总结值(合计、计算以及平均),并将它们分组,一组列在数据表的左侧,另一组列在数据表的上部。例如,在“教材征订管理信息系统”数据库中有一个“教材预订表”,其中记录着各个课堂的教材预订数据。现假设要求统计不同年级课堂使用的教材分别由哪一些出版社出版,各自的预订数量分别为多少册。如图5-4-1所示。就需要设计一个Access交叉表查询对象来实现。5.4 Access的交叉表查询图5-4-1 “馆藏图书分类统计_交叉表”的运行视图从图5-4-1中可以看到,交叉表查询运行的显示形式,是作为数据源的“教材预订表”转置后形成的数据视图。即,将数据源表中的某一字段数据作为交叉表查询的字段名,某几个字段数据作为分类汇总的依据,某一个字段数据被汇总计算后显示在各自的字段下。本节介绍Access的交叉表查询对象设计方法。5.4.1 交叉表查询向导的应用在数据库设计视图的查询对象选项卡上,单击“新建”按钮,在随即弹出的“新建查询”对话框(如图5-1-2所示)中,选定“交叉表查询向导”并单击“确定”按钮“”,即进入“交叉表查询向导”对话框1(如图5-4-2所示)。在这个对话框中,需选择一个数据源(只能是一个表或一个查询)。如果所需建立的交叉表查询是基于某一个数据表的,则可以在这个对话框中选定这个数据表;如果所需建立的交叉表查询是基于多个数据表的,则应该事先建立一个基于这多个数据表的选择查询,而后在这个对话框中选定这个事先建立的选择查询。5.4.1 交叉表查询向导的应用例如,图5-4-1所示的交叉表查询就是一个基于单一数据表的交叉表查询,这个作为数据源的数据表是“教材预订表”。因此,应该指定“教材预订表”表作为本交叉表查询的数据源,如图5-4-2所示。图5-4-2 “交叉表查询向导”对话框15.4.1 交叉表查询向导的应用选定数据源后,单击“下一步”按钮,即进入“交叉表查询向导”对话框2,如图5-4-3所示。然后从选定的数据源中选择作为行标题的字段。这些字段在交叉表查询运行时,将显示在数据表的左端,并作为数据分类的依据。为了实现图5-4-1所示的交叉表查询,此处应选择“课堂编号”字段作为行标题字段。5.4.1 交叉表查询向导的应用图5-4-3 “交叉表查询向导”对话框25.4.1 交叉表查询向导的应用作为行标题的字段选择完毕后,单击“下一步”按钮,即进入“交叉表查询向导”对话框3,如图5-4-4所示。在这个对话框中,需从选定的数据源中选择一个字段作为列标题(注意,作为列标题的字段有且只能有一个)。在交叉表查询运行时,这个字段中的数据将显示在数据表的顶端以字段名的形式出现,并作为数据汇总的基本单位。为了实现图5-4-1所示的交叉表查询,此处须选择“出版社”字段作为列标题字段,如图5-4-4所示。5.4.1 交叉表查询向导的应用图5-4-4 “交叉表查询向导”对话框35.4.1 交叉表查询向导的应用作为列标题的字段选定后,单击“下一步”按钮,即进入“交叉表查询向导”对话框4,如图5-4-5所示。在这个对话框中,需从选定的数据源中选择一个字段作为列标题下的计算值字段。在交叉表查询运行时,这个字段中的数据将参与某种计算,然后显示在数据表中对应字段列下。为了实现。图5-4-1所示的交叉查询表,此处选择“预订册数”字段作为计算值字段,并确定计算函数为“求和”5.4.1 交叉表查询向导的应用图5-4-5 “交叉表查询向导”对话框45.4.1 交叉表查询向导的应用作为计算值的字段选定后,单击“下一步”按钮,即进入“交叉表查询向导”对话框5,如图5-4-6所示。在这个对话框中,需要给所建查询命名,并指定完成交叉表查询的建立后,是准备查看,还是准备进行修改。此处可以输入“教材预订分类交叉表”作为这个查询的名称,并选择“查看查询”单选项。5.4.1 交叉表查询向导的应用图5-4-6 “交叉表查询向导”对话框55.4.1 交叉表查询向导的应用设定完毕上述两项所需参数,单击对话框上的“完成”按钮,即可进入“教材预订分类交叉表”运行视图,如图5-4-7所示。图5-4-7 应用向导建立的“教材预订分类交叉表”运行视图5.4.2 交叉表查询的设计修改将图5-4-7所示数据与图5-4-1所示数据进行比较,就会发现,应用交叉表查询创建的查询对象并不是最终所需的形式。为此,必须进入Access查询设计视图,以便进行这个交叉查询对象的设计修改操作。在“教材征订管理信息系统”数据库设计视图中的“查询”对象选项卡上,选定这个刚刚应用向导建立完成的“教材预订分类交叉表”对象,然后单击工具栏上的“设计”按钮,即进入“教材预订分类交叉表”查询设计视图,如图5-4-8所示。5.4.2 交叉表查询的设计修改需要修改的是第一列“课堂编号”。为此,可以在这一列的“字段”行内定位鼠标,并调用Access表达式生成器,设置其“字段”行数据为“年级:Left$(课堂编号,2)+级”。如图5-4-8所示。这表示该查询对象在运行时,这个查询字段显示“年级”,其查询字段中的数据显示“课堂编号”字段数据的左边2个字符并在最右边显示一个“级”字。参见图5-4-8所示。完成上述操作后,关闭Access查询设计视图,这个名为“教材预订分类交叉表”的交叉表查询就按照原定的目标实现了。可以运行之,仔细观察原定目标实现的准确性。5.4.2 交叉表查询的设计修改图5-4-8 在查询设计视图中修改“教材预订分类交叉表”查询对象5.5 Access的生成表查询5.5.1 生成表查询的作用如前所述,查询只是一个操作的集合,其运行的结果是一个动态数据集。当查询运行结束时,该动态数据集合不会被Access保存在数据库中。如果希望运行查询所形成的动态数据集能够被保存在数据库中,就需要设计Access的生成表查询对象。5.5.1 生成表查询的作用如果需要将“课堂信息汇总查询”运行所获得数据集合一数据表的形式保存在数据库中,就需要将“课堂信息汇总查询”改造成为一个Access生成表查询对象,姑且命名为“课堂信息汇总_生成表查询”。如此,只要运行这个“课堂信息汇总_生成表查询”对象,即可创建一个名为“课堂信息汇总_生成表”的Access表对象,这个Access表对象称为“生成表”。以下,我们来讨论如何设计这样一个Access查询对象,并据此理解Access生成表查询的实际作用。5.5.2 生成表查询的设计下面以上述“课堂信息汇总_生成表查询”对象设计为例,说明其操作步骤。首先,在“教材征订管理信息系统”数据库中复制一份“课堂信息汇总查询”对象,并命名为“课堂信息汇总_生成表查询”。然后,在数据库设计视图中的“查询”对象选项卡上选中它,单击工具栏上的“设计”按钮;在随之出现的查询设计视图中,单击菜单栏上的【查询】|【生成表查询】,如图5-5-1所示。5.5.2 生成表查询的设计图5-5-1 “课堂信息汇总_生成表查询”设计视图5.5.2 生成表查询的设计随之即会弹出“生成表”对话框,如图5-5-2所示。在“生成表”对话框中,需要确定生成表的名称,并确定生成表所属的数据库。如图5-5-2所示。最后,单击“生成表”对话框上的“确定”按钮;即完成了“课堂信息汇总_生成表查询”的设计操作 图5-5-2 “生成表”对话框5.5.2 生成表查询的设计设计完成一个生成表查询后,就可以打开运行它。与打开选择查询对象和交叉表查询对象的情况不同,Access并不显示查询运行视图,而是在数据库中新建了一个数据表对象,其中的数据即为生成表查询运行的结果。例如,“课堂信息汇总_生成表查询”运行一次的结果,就是在数据库中新建了一个名为“课堂信息汇总_生成表”的Access数据表对象,其中的数据就是“课堂信息汇总_生成表查询”的运行结果。可以打开这个数据表查看以下,会发现它的数据显示内容完全相同于“课堂信息汇总查询”运行视图中的数据显示内容。5.5.3 生成表查询的实质查询的实质就是SQL语句的应用。以下是“课堂信息汇总_生成表查询”的SQL语句:SELECT 课堂信息表.课堂编号,课程信息表.课程名称,课堂信息表.专业,课堂信息表.年级,Sum(课堂信息表.人数)AS 总人数 INTO 课堂信息汇总_生成表FROM 课程信息表 LEFT JOIN 课堂信息表 ON 课程信息表.课程代码=课堂信息表.课程代码GROUP BY 课堂信息表.课堂编号,课程信息表.课程名称,课堂信息表.专业,课堂信息表.年级ORDER BY 课堂信息表.课堂编号;5.6 Access的更新查询5.6.1 更新查询的作用如果需要在Access数据库中对数据表中的某些数据进行有规律地成批更新替换操作,则需要使用Access更新查询来实现。Access的更新查询对象是这样的查询对象:一旦运行一个Access更新查询对象,即可有规律地、成批地更新一个指定的Access数据表中的若干字段数据。以下,我们即以将“教材预订表”全部记录中的所有“预订册数”字段数据都在原数值上加1作为设计目标,设计一个名为“预订册数_更新查询”的Access更新查询对象,来介绍Access更新查询对象的设计方法。5.6.2 更新查询的设计首先,在“教材征订管理信息系统”数据库中创建一个选择查询,指定其数据源为需要更新其中数据的Access表对象“教材预订表”。接着,将其中需要更新数据的字段“预订册数”拖曳至查询设计视图的“字段”行中。然后,单击菜单栏上的【查询】|【更新查询】,可以看到在查询设计视图中新增一个“更新到”行。此时,需要在该行中填入数据更新的规则“教材预订表!预订册数+1”。如图5-6-1所示。5.6.2 更新查询的设计图5-6-1 “预订册数_更新查询”设计视图5.6.2 更新查询的设计最后,保存这个查询对象,命名为“预订册数_更新查询”,即完成了这个Access更新查询对象的设计操作。只需运行该查询对象,数据源表“教材预订表”中的“预订册数”字段数据就按照数据更新规则得到了更新。设计完成一个更新查询后,就可以打开运行它。与运行选择查询对象、交叉表查询对象的情况不同,Access并不显示更新查询的运行视图,而是根据指定的更新条件与计算更新规则,在数据库中更新了数据源表中相关字段的数据。比如,“预订册数_更新查询”打开一次的结果,就将“教材预订表”中全部记录的“预订册数”字段数据加1。5.6.3 更新查询的实质查询的实质就是SQL语句的应用。观察“预订册数_更新查询”的SQL语句,就可以看到,“预订册数_更新查询”是一条用于数据库数据更新的SQL语句:UPDATE 教材预订表 SET 教材预订表.预订册数=教材预订表!预订册数+1;5.7 Access的追加查询5.7.1 追加查询的作用在Access数据库中,如果需要从数据库的某一个数据表中筛选出一些数据,可以使用选择查询。进而,如果需要将这些筛选出来的数据追加到数据库中另外一个结构相同的数据表里,则必须使用追加查询了。因此,追加查询的作用就是,从一个Access表中筛选出一些数据追加到另外一个具有相同结构的Access表中。5.7.1 追加查询的作用例如,在介绍生成表查询时,我们曾经设计了一个名为“课堂信息汇总_生成表查询”的生成表查询对象,用“课堂信息汇总查询”中的数据生成了一个“课堂信息汇总_生成表”。随着时间的推移,新的学期即将开始,又会有新的课堂编排出来。于是希望能够将新学期的课堂信息汇总数据追加到“课堂信息汇总_生成表”中。这就是Access追加查询对象的作用所在。以下,我们即以这样的需求为目标,设计一个名为“课堂信息汇总_追加查询”的追加查询对象,来介绍Access追加查询的设计方法。假设“课堂信息表”中的“课堂编号”字段的数据规则为,最左边的2位数据标志学年、最左边的第3位标志学期,如课堂编号为“051101221”的课堂表示2005年第一学期的课堂。5.7.2 追加查询的设计首先,在“教材征订管理信息系统”数据库中复制一份“课堂信息汇总查询”对象,并命名为“课堂信息汇总_追加查询”。然后,在数据库设计视图中的“查询”对象选项卡上选中它,单击工具栏上的“设计”按钮,进入“课堂信息汇总_追加查询”设计视图。接着,需要对“课堂编号”字段设置追加条件“Left$(课堂编号,3)=051”,保证运行“课堂信息汇总_追加查询”对象时,能够将05年第1学期的课堂追加到“课堂信息汇总_生成表”中。在具有汇总功能的Access查询中设置的条件表达式将自动被Access置于查询设计视图的最左端字段上,Access还将自动设置该字段为不显示字段。5.7.2 追加查询的设计最后,应该在“课堂信息汇总_追加查询”设计视图中单击菜单栏上的【查询】|【追加查询】,在回答了随即弹出的“追加”对话框中关于被追加表对象名称“课堂信息汇总_生成表”的问题后,可以看到在查询设计视图中新增一个“追加到”行。如此,即完成了追加查询的设计。如图5-7-1所示。5.7.2 追加查询的设计图5-7-1 “课堂信息汇总_追加查询”的设计视图5.8 Access的删除查询5.8.1 删除查询的作用如果需要从数据库的某一个数据表中有规律地成批删除一些记录,可以使用删除查询来满足这个需求。应用删除查询对象成批地删除数据表中的记录,应该指定相应的删除条件,否则就会删除数据表中的全部数据。这就是说,删除查询对象必需包含有对应的删除条件。由于Access删除查询对象的特点,其间包含的记录删除条件必须能够用一个关系表达式或逻辑表达式表述。5.8.1 删除查询的作用现假设在“教材征订管理信息系统”数据库的“教材征订表”中已经记录了七寰书店的征订折扣为0.85,需要设计一个Access删除查询对象来完成删除这些记录的任务。以下,我们即以这样的需求为目标,设计一个名为“教材征订记录_删除查询”的删除查询对象,来讲述Access删除查询的设计方法。5.8.2 删除查询的设计首先,在“教材征订管理信息系统”数据库中创建一个选择查询,其数据源为需要从中删除数据记录的表对象“教材征订表”。接着,将其中作为删除条件的字段“供书商”拖曳至查询设计视图的“字段”行中。然后,单击菜单栏上的【查询】|【删除查询】,随即可以看到在查询设计视图中新增一个“删除”行,其间显示着“Where”,它表示需要在其下的“条件”行设定删除条件。根据实际应用需要的删除条件,应该在“教材征订记录_删除查询”设计视图的“条件”行设定“七寰书店”作为删除条件。如此,即完成了追加查询的设计。如图5-8-1所示。5.8.2 删除查询的设计图5-8-1 “教材征订记录_删除查询”的设计视图5.8.3 删除查询的实质Access查询对象的实质就是SQL语句的应用。观察“教材征订记录_删除查询”的SQL语句,就可以看到,“教材征订记录_删除查询”是一条用于删除数据库记录的SQL语句:DELETE 教材征订表.供书商FROM 教材征订表WHERE(教材征订表.供书商)=七寰书店);5.9 习题1.请叙述Access查询对象的作用及其与Access数据表对象的差别。2.请列举Access所支持的6种类别的查询对象,并分别说明各自的特点及其应用范围。3.请说明“结构化查询语言(SQL)”的特点及其类别。4.请参照图5-2-1所示“教材征订查询”对象的设计参数,完成“教材征订查询”对象的设计。5.写出满足以下各小题要求的SQL语句。从“教材征订查询”对象中筛选出“供书商”为“武汉新华书店”的“教材名称”、“出版社”、“作者”和“课程名称”、“任课教师”五个字段的数据。5.9 习题从“教材征订查询”对象中筛选出“清华大学出版社”出版的教材的全部征订信息。.请参照图5-1-7所示“课堂信息查询”对象的设计参数,完成“课堂信息查询”对象的设计。.请参照图5-3-3所示“课堂信息汇总查询