第5章创建Access的查询对象学习目标使用设计器创建查询对象的方法使用查询向导创建查询对象的方法在查询中自定义字段数据的方法使用条件表达式描述用户查询要求的方法本章内容1.创建查询对象查找所需数据2.创建查询对象操作数据3.创建查询对象生成新数据4.总结提高5.知识扩展6.思考与练习设计数据库时,为了节省存储空间,为了数据不冲突,要将数据按主题(实体)分类,并分别存放在不同的表里,如何从数据库这些表中找出用户需要的数据呢?Access中的查询对象就是专门从数据库表中查找对象的专门工具,如图所示,查询对象可以从一个表、多个表、表与查询、查询与查询中查找用户所要的数据。本节的主要任务是学习如何创建查询对象、使用查询对象从不同表、查询对象中查找用户需要的数据。5.1.创建查询对象查找所需数据数据库表2查询2查询表1查询1表5.1.1.创建查询从一个表中查找数据问题的提出一个表中可能包含多个字段数据,有时用户只需要表中的部分数据,这个问题如何解决呢?查询对象可以解决这个问题,可以从一个表确定要查找的字段数据,并显示查找到的数据。这类查询称为选择查询,它是查询对象中最常用的一种查询。【操作实例1】创建名称为“物品基本信息”的选择查询对象,从“物品”表中查找“物品编号”、“名称”、“物品类型”、“制购类型”字段的数据。【操作实例1】操作步骤:(1)在Access中打开“格达公司”数据库。(2)打开查询设计器【操作实例1】(3)选择查询对象的数据来源表【操作实例1】(4)确定查询对象查找的数据字段(5)保存查询对象【操作实例1】(6)预览查询对象归纳分析(1)【显示表】对话框的使用(2)查询设计视图的组成(3)主窗口中菜单栏、工具栏的变化5.1.2.创建查询从多个表中查找数据问题的提出【操作实例1】介绍了从一个表中查找数据的方法,如何从多个表中查找出需要的数据呢?【操作实例2】将介绍了如何从多个表中查找数据,通过这个实例可以理解为什么要在数据库中建立表之间的关系。【操作实例2】创建名称为“外设物品价格”的查询对象,从“物品”、“供应商”、“供应商与物品”3个表中查找“物品编号”、“外设名称”、“供应商名称”、“价格”字段的数据,通过它们可以了解不同供应商提供的外设的价格信息。【操作实例2】操作步骤:(1)在Access中打开“格达公司”数据库。(2)打开查询设计器(3)选择查询数据的来源表【操作实例2】(4)确定查询对象要查找的数据字段(5)设置查找的条件归纳分析创建来自多个表的查询对象的步骤①打开查询设计器②选择查询数据来源③建立表之间的关系④添加目标字段。⑤设置查询条件⑥保存查询对象5.1.3.创建查询通过输入参数条件查找数据问题的提出【操作实例2】中查找了带有条件的数据,但条件是固定不变的。能不能根据用户的需要在运行查询时增加人机交互的接口,使用户可以根据提示输入参数条件,使查询对象能根据用户输入的参数条件为不同用户查找不同的数据呢?查询对象可以解决这个问题,不仅可以提供一个输入参数条件的接口,还可以提供多个人机交互的接口,按交互方式输入的条件查找数据。这类查询称为参数查询。【操作实例3】创建名称为“供应商物品价格”的参数查询对象,可以根据用户输入的不同物品名称显示供应商提供的物品价格信息。【操作实例3】操作步骤:(1)打开查询对象【操作实例3】(2)将查询另存为一个新查询对象(3)定义输入参数条件的提示文字【操作实例3】(4)保存并运行查询归纳分析通过原有查询对象生成新查询对象的方法如果新创建的查询对象与原有的查询对象类似,可在设计视图中打开原有的查询对象,通过“另存为”对话框将它保存为新查询对象的名称,通过在设计视图修改查询字段与查询条件得到新查询对象。归纳分析定义输入参数条件的提示文字的方式实现用户人机交互的接口,只要在查找数据的字段【条件】单元格中输入“[]”方括号,在方括号中定义的文字将在执行查询对象时打开的输入参数对话框中显示,这些文字主要是为了提示用户输入参数参考的,为可选项,如果不定义文字,将打开没有提示信息的对话框。在打开的输入参数对话框中一定要按字段数据要求输入具体数据值,否则会找不到任何数据。归纳分析可在多个字段相应的【条件】单元格定义不同的参数,在执行查询对象时将分别打开提示输入对话框,可按要求输入不同的参数,将按多个条件查找满足要求的数据。5.1.4.创建查询通过向导查找交叉数据问题的提出在实际生活当中,经常用行标题显示某类产品,用列标题显示该类中的具体产品,在行列的交叉处显示这类产品的具体数据,这种显示数据表称为交叉表。在Access数据库中能否找出交叉数据,并按交叉表显示交叉信息呢?Access的查询对象可以解决这个问题,为解决这个问题可以专门创建一个查询对象,这类查询对象称为交叉表查询。【操作实例4】创建名称为“外设物品价格-交叉表”的交叉表查询对象,该查询用来查找每位供应商提供的外设物品价格,交叉表上使用“供应商名称”字段值做列标题、“名称”字段值做行标题,交叉位置显示该供应商提供的外设物品价格。【操作实例4】操作步骤:(1)启动查询向导(2)回答向导提问回答查找数据的表或查询的名称(在哪里找数据)回答交叉表中用哪个字段的值做行标题回答交叉表中哪个字段的值用来做列标题图5.18选择交叉表查找的表/查询图5.19选择做行标题的字段图5.20选择做列标题的字段【操作实例4】【操作实例4】回答交叉表中交叉点计算什么数值回答新建查询的名字【操作实例4】(3)自动创建交叉表查询归纳分析(1)使用向导创建查询对象的步骤启动查询向导回答向导提问自动创建查询对象。归纳分析(2)创建交叉表对象的关键交叉表对象的实质是查找作为行标题的字段、列标题的字段、交叉位置的字段的数据,所以,创建交叉表对象的关键就是确定行标题的字段、列标题的字段、交叉位置的字段。在设计视图可以重新选择行标题的字段、列标题的字段与交叉位置的字段。归纳分析(3)交叉表查询的数据源交叉表查询只能在一个表或查询中查找数据,如果交叉表中查找的三个字段数据来自于多个表和查询中需要事先创建一个来自多表的查询,然后再根据这个查询对象创建交叉表查询。5.2.创建查询对象操作数据查询对象不仅能从表及查询中查找满足指定条件的字段数据,还可以对查找到的记录进行不同的处理。本节的主要任务就是掌握通过查询对象将查找到的记录生成新表、删除、追加、更新等操作方法。5.2.1.创建查询将查找的数据生成一个新表问题的提出在Access中,在表设计视图通过“另存为”命令可以将原有的表保存为一个新表,但只是生成一个与原表相同的表结构。能不能将现有表中的字段及数据生成一个新表呢?查询对象可以解决这个问题,不仅可以从一个表提取数据生成一个新表,还可以从几个表或查询中提取数据,将数据及表结构一同生成一个新表。这类查询称为生成表查询。【操作实例5】创建名称为“客户销售价格表-生成表”的生成表查询对象,该查询用来创建一个包含字段为“物品编号、名称、价格、客户名称”的新表“客户销售价格表”。【操作实例5】操作步骤:(1)打开查询设计视图(2)选择查询字段【操作实例5】(3)将查询定义为“生成表查询”类型图5.25选择查询类型为“生成表查询”图5.26“生成表”对话框【操作实例5】(4)预览将要生成的表(5)生成新表归纳分析(1)通过查询生成新表的步骤在查询设计视图确定新表的字段。定义查询为“生成表查询”类型。预览查找到的新表中的数据。运行查询生成新表。归纳分析(2)生成新表注意事项如果预览到的一组记录不是你要生成的表的数据,可单击工具栏【视图】按钮,返回查询设计视图,修改查找的字段设置查询条件,直到满意为止。以后运行生成表查询都会生成该表,如果定义的表已经存在,将覆盖已有的表。5.2.2.创建查询将查找的数据从表中删除问题的提出整理数据的主要操作之一就是删除数据,前面介绍的删除数据的方法,只能手动删除表中某一个记录或单个字段的数值,非常麻烦。能不能让系统自动删除一批记录,或删除一批满足相同条件的记录呢?查询对象可以解决这个问题,查询对象可以将删除的数据按指定条件查找出来,再统一进行删除处理。这类查询称为删除查询。【操作实例6】创建名称为“删除数据查询”的删除查询对象,该查询用来删除“客户销售价格表”中销售价格在1000元以下的客户销售物品的记录。【操作实例6】操作步骤:(1)打开查询设计视图(2)选择“客户销售价格表”表的所有字段作为查询字段【操作实例6】(3)选择查询类型为“删除查询”(4)输入查询准则(5)预览要删除的数据图5.30查询设计表格中添加的【删除】行图5.31输入删除准则图5.32浏览将要删除的记录【操作实例6】(6)执行删除记录的操作归纳分析创建删除查询对象与创建生成表步骤类似。但要注意删除数据记录后将不能再恢复,所以一定要小心运行删除查询。5.2.3.创建查询将查找的数据统一更新问题的提出通过操作实例6知道可以自动删除表中的一批数据,能不能对表中的一批数据自动进行更新操作呢?查询对象可以解决这个问题,查询对象可以将更新的数据按指定条件查找出来,再对这些数据进行更新处理。这类查询称为更新查询。【操作实例7】创建名称为“涨价操作”的更新查询对象,该查询用来将“客户销售价格表”中的“高能PC”电脑的销售价格涨价10%。【操作实例7】操作步骤:(1)打开查询设计视图(2)选择查询字段【操作实例7】(4)输入查询准则(5)预览“更新查询”检索的数据【操作实例7】(6)执行更新数据的操作(7)保存更新查询归纳分析运行更新查询一定要注意,每执行一次就会更新一次,如果是涨价,执行一次将涨价10%。更新数据之前一定要认真浏览一下找出的数据是不是要更新的数据。5.2.4.创建查询将查找的数据追加到指定表中问题的提出能不能将某个表中符合一定条件的数据添加到另一个表中呢?例如有两个学生名单的表,能否合在一个表中呢?或者将其中的一部分数据添加到另外一个表中呢?查询对象可以解决这个问题,查询对象可以将追加的数据按指定条件查找出来,再追加到指定的表中。这类查询称为追加查询。【操作实例8】创建名称为“添加学生名单”的追加查询对象,该查询用来将“ERP名单”中的数据追加到“学生名单”表中。【操作实例8】操作步骤:(1)将excel表格文件“ERP概论名单”文件导入到“格达公司”数据库,保存为“ERP名单”表对象。(2)打开查询设计视图(3)选择查询字段(4)选择查询类型为“追加查询”并确定追加的目的表【操作实例8】(5)选择追加数据的字段与目的表中对应的字段(6)预览查找到的数据【操作实例8】(7)执行追加数据的操作(8)保存追加查询归纳分析(1)区分源表与目的表的字段第1行“字段”为数据源表的字段,例如“ERP名单”表。“追加到”单元格中显示的字段为目的表中的字段,例如“学生名单”表。(2)追加的条件两个表字段的数据类型、大小一致时才可以进行追加操作。如果两个表字段数据类型、顺序完全相同,可直接追加。追加数据时还可以定义条件准则,有选择的添加数据5.3.创建查询对象生成新数据根据数据库的数据能不能加工生成新的数据呢?如何通过现有数据生成新数据呢?本节的主要任务就是通过查询对象以一个或多个表及查询对象为基础,使用表达式在查询中创建新的字段、生成新的数据。5.3.1.创建查询按总计生成新数据问题的提出对查找到的记录数据能不能统计记录的条数?对字段数据能不能进行汇总?求平均数?查询对象可以解决这些问题,在查询设计视图下通过Access的总计计算功能,可在查询中对查找到的数据记录进行统计。【操作实例9】创建名称为“生成销售物品总计数据”的查询对象,该查询用来生成销售物品总数、最大的销售价格、最小的销售价格、平均的