《Access数据库应用技术》课件第3章_第1页
《Access数据库应用技术》课件第3章_第2页
《Access数据库应用技术》课件第3章_第3页
《Access数据库应用技术》课件第3章_第4页
《Access数据库应用技术》课件第3章_第5页
已阅读5页,还剩195页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章查询设计3.1查询概述3.2创建选择查询实例3.3创建参数查询3.4创建交叉表查询实例3.5在查询中使用条件操作实例3.6在查询中进行计算操作实例3.7操作查询创建实例3.8创建SQL查询上机实验3查询的创建与应用

3.1查询概述

3.1.1查询的定义与作用

MicrosoftAccess中的查询一般是指在数据库中按照预设的条件查找相关数据的过程,不修改数据库中的数据。但其中也包含了另一类查询——操作查询,可以对符合条件的记录进行修改或移动。一般来说,创建查询就像是对Access提出了一个问题,运行查询时它会给出相应的结果。3.1.2查询的类型

在MicrosoftAccess中查询分成以下五种类型。

(1)选择查询。选择查询是最常见的查询类型,它从一个或多个表中检索数据,并且在可以更新记录(有一些限制条件)的数据表中显示结果。也可以使用选择查询来对记录进行分组,并且对记录进行总计、计数、平均值以及其他类型的总和计算。

(2)参数查询。参数查询是这样一种查询,它在执行时显示自己的对话框以提示用户输入信息,例如条件、检索要插入到字段中的记录或值。可以设计此类查询来提示更多的内容,例如可以设计它来提示输入两个日期,然后Access检索在这两个日期之间的所有记录。

(3)交叉表查询。使用交叉表查询可以计算并重新组织数据的结构,这样可以更加方便地分析数据。交叉表查询计算数据的总计、平均值、计数或其他类型的总和,这种数据可分为两组:一组在数据表左侧排列,另一组在数据表的顶端。

(4)操作查询。操作查询用来创建或修改表,使用这种查询时只需进行一次操作就可对多条记录进行更改和移动。在Access中有四种操作查询:生成表查询、更新查询、删除查询和追加查询。

(5) SQL查询。SQL查询是用户使用SQL语句创建的查询。可以用结构化查询语言(StructureQueryLanguage)来查询、更新和管理Access这样的关系数据库。

有一些SQL查询称为“SQL特定查询”,无法在“QBE”(按示例查询)设计网格中进行创建。对于传递查询、数据定义查询和联合查询,必须直接在SQL视图中创建SQL语句。对于子查询,可以在查询设计网格的“字段”行或“条件”行中输入SQL语句。3.1.3查询的视图

1.设计视图

查询的设计视图用于创建和修改查询。查询的设计视图窗口分为上下两个部分:上半部分的窗格为数据环境,显示出当前查询的数据来源,可以是当前数据库中已有的表或查询,同时显示表之间的关系;下半部分的窗格显示查询所要包含的字段,常称之为按示例查询网格,即上文提及的“QBE”,如图3-1所示。若要在设计视图中打开一个查询,在“数据库”窗口中单击“对象”下的“查询”,在“数据库”窗口右侧的对象列表中选中要在设计视图中打开的查询,单击“数据库”窗口工具栏上的设计按钮  即可。图3-1查询的设计视图下面介绍一下“QBE”网格中每行的作用。

●字段:在查询结果集中显示的字段名称,如“学号”、“姓名”、“课程名称”等。

●表:字段所属的表,如“学号”字段来自“学生”表,“课程名称”字段来自“课程”表。

●排序:查询结果集中字段值的排列顺序(升序或降序),在Access中默认的排序顺序是“升序”。

●显示:选择当前字段是否在查询结果集中显示,选中表示显示,反之表示不显示。

●条件:检索数据的限制条件,通过它可以改变结果集中记录的个数。如在“成绩”字段的“条件”单元格中输入“>60”,则查询结果集中只显示成绩大于60分的记录。

●或:附加的检索限制条件,如“<100”。

2.数据表视图

数据表视图以行和列的格式显示来自查询结果集中的数据,如图3-2所示。若要在数据表视图中打开一个查询,可在“数据库”窗口中单击“对象”下的“查询”,在“数据库”窗口右侧的对象列表中双击要打开的查询。如果该查询已在设计视图中打开,可单击工具栏上的视图按钮  ,切换到数据表视图。图3-2查询的数据表视图

3. SQL视图

SQL视图用于显示当前查询的SQL语句或对SQL语句进行修改,如图3-3所示。对于那些对SQL语句比较了解的用户,可以在SQL视图中输入SQL语句创建一个SQL查询,在其中输入SQL语句可以起到和图形界面相同的效果。当然如果想要通过视图的切换来对照学习SQL语句也未尝不可。在设计视图或数据表视图中打开一个查询后,选择“视图/SQL视图”命令,或单击工具栏上“视图”按钮右侧的向下箭头,从下拉菜单中选择“SQL视图”命令即可。图3-3查询的SQL视图

4.数据透视表视图

数据透视表视图用于汇总并分析数据表中的数据,如图3-4所示。图3-4查询的数据透视表视图

5.数据透视图视图

数据透视图视图以图形方式显示数据表中的数据,如图3-5所示。图3-5查询的数据透视图视图 3.2创建选择查询实例

3.2.1使用向导创建选择查询

和使用表向导创建一个数据表相同,使用查询向导创建选择查询也较为简单。大体上根据向导的提示做出相应的选择即可完成任务。

实例3.1使用查询向导创建一个显示每个学生的学号、姓名与生源地的单表查询。

操作步骤如下:

(1)在“数据库”窗口中,单击“对象”下的“查询”。工作区域变为如图3-6所示的形式,单击“数据库”窗口工具栏上的新建按钮  ,弹出如图3-7所示的“新建查询”对话框。图3-6数据库窗口图3-7“新建查询”对话框(2)在图3-7中可以看到,Access提供了四种查询向导。

●简单查询向导:可以从一个表或多个表中选择字段,主要用于创建选择查询。

●交叉表查询向导:可以创建查询来计算所有行与列总值的查询向导。

●查找重复项查询向导:可以用来创建查询以确定表中是否有重复记录的查询向导。

●查找不匹配项查询向导:可以创建查询以确定表中的记录是否和相关表中的记录无关的查询向导。

为了完成查找每个学生的“学号”、“姓名”与“生源地”的功能,单击“简单查询向导”,然后单击“确定”按钮。

(3)在“表/查询”列表中,选择作为查询对象的表,这里选择“学生”表。在“可用字段”列表中,选择查询所需要的字段,可以在字段上单击,然后单击“可用字段”与“选定的字段”之间的“”,将其添加到“选定的字段”列表中,也可以直接双击该字段将其添加到“选定的字段”列表中。在此选择“学号”、“姓名”、“生源地”三个字段,如图3-8所示。完成后单击“下一步”按钮继续。

(4)如图3-9所示,在“请为查询指定标题”框中输入查询的名称,选择“打开查询查看信息”或“修改查询设计”中的一个,单击“完成”按钮,完成整个查询的创建。在这个对话框中,当选择“打开查询查看信息”时,可以看到查询的结果集;当选择“修改查询设计”时,将打开查询的设计视图(下面的内容将详细介绍如何使用查询的设计视图)。图3-8简单查询向导(一)图3-9简单查询向导(二)查询的结果集如图3-10所示。从结果集中可以看出,使用“简单查询向导”创建的查询,运行时将从源数据表中返回所有的行,不作筛选。图3-10“学生生源地查询”的结果集提示:在查询的数据表视图中无法加入或删除列,而且不能修改查询字段的字段名。这是因为由查询所生成的数据值并不是真正存在的值,而是动态地从表对象中调来的,是表中数据的一个镜像。查询只是告诉Access需要什么样的数据,而Access就会从表中查出这些数据的值,并将它们反映到查询数据表中来。也就是说,这些值只是查询的结果。选择目标字段就是告诉Access需要哪些表中的哪些字段,而Access会把字段中的数据列成一个表反馈给用户。当然在查询中还可以运用各种表达式来对表中的数据进行运算,生成新的查询字段。实例3.2

用“简单查询向导”创建一个多表查询,查询每个学生的学号、姓名、课程名称及成绩。

操作步骤如下:

(1)在“数据库”窗口中,单击“对象”下的“查询”,单击“数据库”窗口工具栏上的“新建”按钮,打开“新建查询”对话框。

(2)单击“简单查询向导”,然后单击“确定”按钮,打开“简单查询向导”对话框(一),如图3-11所示。图3-11“简单查询向导”对话框(一)

(3)在“表/查询”列表中,选择作为查询对象的表,这里分别选择“学生”表的“学号”和“姓名”字段、“课程”表的“课程名称”字段和“成绩”表的“成绩”字段,如图3-11所示。

(4)单击“下一步”按钮,打开如图3-12所示的对话框,其中有两个选项:“明细(显示每个记录的每个字段)”与“汇总”。本实例要求显示每个学生的姓名、参考课程与成绩,所以需要选择第一项“明细(显示每个记录的每个字段)”。

如果这时选择了“汇总”,则需要单击“汇总选项”按钮,打开“汇总选项”对话框,以进一步选择当前的操作是关于“汇总”、“平均”、“最小”和“最大”中的一个或多个,如图3-13所示。图3-12“简单查询向导”对话框(二)图3-13“汇总选项”对话框

(5)单击“下一步”按钮,根据窗口提示在文本框中输入查询的名称,单击“完成”按钮。

(6)系统将自动运行查询,给出结果集,如图3-14所示。图3-14每个学生每门课程的成绩查询结果集3.2.2使用设计器创建选择查询

使用向导创建一个查询时,可以完成一些简单或特定任务的查询(如交叉表查询),但是它有一定的局限性,如对查询结果不能进行过滤,返回结果集时包含源表中的所有记录行。而使用查询设计器不但可以按照用户的设计需求来选择字段及相关筛选条件,还可以对一个已有的查询进行修改或编辑以适应新的用户需求。实例3.3使用“查询设计器”创建一个“性别为女的学生”查询。

操作步骤如下:

(1)在“数据库”窗口中单击“对象”下的“查询”,在“数据库”窗口右侧的对象列表中双击“在设计视图中创建查询”,打开查询的设计窗口,同时出现如图3-15所示的“显示表”对话框。图3-15查询的设计视图及“显示表”对话框

(2)选择源数据所属的表或查询到数据环境。在“显示表”窗口中,双击需要添加的表或查询;或单击需要添加的表或查询,再单击“添加”按钮。在此选择“学生”表。

(3)从表或查询中拖放创建新查询所需要的字段至“QBE”的字段行,或双击所需要添加的字段。可以在“QBE”中选择需要调整的字段,拖放到合适的位置。注意添加顺序,因为查询将在结果集中以此顺序排列字段。在此选择“学生”表中的所有字段,并在“性别”字段的“条件”单元格中输入“女”,如图3-16所示。图3-16查询的设计视图提示:在输入字符串时,可以不加半角的双引号,只输入一个“女”字,Access会自动加上半角的双引号,变为“”女“”。

(4)单击工具栏上的运行按钮  ,运行查询;或单击工具栏上的“视图”按钮  ,切换到数据表视图,查看查询结果,如图3-17所示。

(5)单击工具栏上的“保存”按钮 ,或选择“文件\保存”,在打开的“另存为”对话框中输入查询的名称以保存查询,如图3-18所示。图3-17在数据表视图中查看查询结果图3-18“另存为”对话框实例3.4

使用“查询设计器”创建一个显示某个教师的教师编号、姓名、职称与参加工作时间的单表查询。

操作步骤如下:

(1)在“数据库”窗口中单击“对象”下的“查询”,在“数据库”窗口右侧的对象列表中双击“在设计视图中创建查询”,打开查询的设计窗口,同时出现“显示表”对话框。

(2)选择源数据所属的表或查询到数据环境。在“显示表”窗口中,双击需要添加的表或查询;或单击需要添加的表或查询,再单击“添加”按钮。在此选择“教师”表,如图3-19所示。图3-19选择“教师”表

(3)从表或查询中拖放创建新查询所需要的字段至“QBE”的字段行,或双击所需要添加的字段。可以在“QBE”中选择需要调整的字段,拖放到合适的位置。注意添加顺序,因为查询将在结果集中以此顺序排列字段。在此选择“教师编号”、“姓名”、“工作时间”与“职称”四个字段,并在“姓名”字段的条件单元格中输入“="张永周"”,如图3-20所示。图3-20选择需要调整的字段

(4)单击工具栏上的“运行”按钮  ,运行查询,或单击工具栏上的“视图”按钮  ,切换到数据表视图,查看查询结果,如图3-21所示。图3-21在数据表视图中查看查询结果

(5)单击工具栏上的“保存”按钮  ,或选择“文件\保存”,在打开的“另存为”对话框中输入查询的名称,以保存查询,如图3-22所示。图3-22保存查询实例3.5在设计视图中创建—查询,查询当前数据库中为“选修”课的课程号及课程名称。

操作步骤如下:

(1)在“数据库”窗口中单击“对象”下的“查询”,在“数据库”窗口右侧的对象列表中双击“在设计视图中创建查询”。

(2)打开查询的设计窗口,同时打开“显示表”对话框。在显示表对话框中选择添加“课程”表到数据环境中,如图3-23所示。图3-23选择添加“课程”表图3-24添加字段至“QBE”

(3)双击“课程号”、“课程名称”、“是否必修”三个字段到“QBE”网格中,并在“是否必修”字段的“条件”单元格中输入“No”,如图3-24所示。

提示:对于“数据类型”为“是/否”的字段,在设置条件时,“是”为“Yes”,“否”为“No”。

(4)单击工具栏上的“运行”按钮  ,查看查询结果集,如图3-25所示。图3-25在数据表视图中查看查询结果

(5)单击工具栏上的“保存”按钮  ,或选择“文件\保存”命令,在打开的“另存为”对话框中输入查询的名称“选修课程查询”,以保存查询设计。3.2.3设置查询的属性

1.设置查询的唯一值属性

在查询设计视图中单击设计网格和字段列表之外的任何地方,以选定查询。单击工具栏上的  按钮,打开查询的属性表,单击“唯一值”属性框,将“唯一值”属性设置为“是”。

2.设置查询的上限值属性

在查询结果集中可以在指定的字段中只显示符合上限值或下限值条件的记录,或符合上限值的前百分之几或下限值的后百分之几的记录。

实例3.6在“学生成绩”查询中,只显示ACCESS课程成绩最高的前三名同学的记录。操作步骤如下:

(1)在“数据库”窗口中,单击“对象”下的“查询”,在“数据库”窗口右侧的对象列表中单击“学生成绩”查询,单击“数据库”窗口工具栏上的“设计”按钮,在设计视图中打开该查询。

(2)选择“文件\另存为”命令,将查询另存为“ACCESS前三名的成绩”。

(3)在“课程名称”字段的条件单元格中输入“ACCESS”;单击“成绩”字段的“排序”单元格,选择“降序”排序,设置结果如图3-26所示。

(4)单击设计网格和字段列表之外的任何地方,以选定查询。单击工具栏上的  按钮,打开查询的属性表,单击“上限值”属性框,在“上限值”属性框中输入“3”,如图3-27所示。图3-26设置条件及排序记录图3-27设置查询的上限值属性

(5)单击工具栏上的“运行”按钮  ,查看查询结果,如图3-28所示。图3-28在数据表视图中查看查询结果

(6)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称“ACCESS前三名的成绩”,以保存查询设计。3.2.4运行查询

运行查询的方式有四种,可选择其中的任何一种:

(1)在设计视图中打开查询,单击工具栏中的“运行”按钮  。

(2)在设计视图中打开查询,选择“查询\运行”命令。

(3)在“数据库”窗口中,单击“对象”下的“查询”,在“数据库”窗口右侧的对象列表中直接双击要运行的查询。

(4)在设计视图中打开查询,选择“视图\数据表视图”,或单击工具栏中的“视图”按钮。

3.3创建参数查询

3.3.1创建单参数查询

“单参数查询”是参数查询的一种常见形式。在运行这类查询时,作为参数值的项目只要输入一次即可得到结果集。

实例3.7

对查询教师信息的查询实例3.4进行改造,希望能够通过该查询查找任意姓名的教师信息。

操作步骤如下:

(1)在设计视图中打开“指定姓名的教师查询”,将其另存为“教师姓名参数查询”。

(2)在“姓名”字段的“条件”单元格中键入下列内容:[请输入老师姓名:],如图3-29所示。图3-29单参数查询

(3)单击工具栏上的‘运行“按钮  ,运行该查询时,将打开如图3-30所示的“输入参数值”对话框,只要输入某一教师姓名就可以得到相应的结果集。图3-30“输入参数值”对话框

(4)单击工具栏上的“保存“按钮  ,在打开的“另存为”对话框中输入查询的名称“教师姓名参数查询”,以保存查询设计。

实例3.8创建一个参数查询,查询学生中来自于以任一地名为参数的学生信息。

操作步骤如下:

(1)在“数据库”窗口中,单击“对象”下的“查询”,在“数据库”窗口右侧的对象列表中双击“在设计视图中创建查询”,在设计视图中创建一个查询,将查询保存为“生源地参数查询”。

(2)在数据环境中增加“学生”表,并将“*”和“生源地”字段拖放到“QBE”网格中,取消“生源地”字段的“显示”复选框,并在“条件”单元格中输入:[请输入生源地名称:],如图3-31所示。图3-31生源地参数查询

(3)单击工具栏上的“运行”按钮  ,打开“输入参数值”对话框,输入生源地名称,如图3-32所示。单击“确定”按钮。运行查询得到结果集,如图3-33所示。

(4)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称“生源地参数查询”,以保存查询设计。图3-32在“输入参数值”对话框中输入生源地名称图3-33参数查询实例3.7的结果集3.3.2创建多参数查询

有了上面对于“单参数查询”的了解,类似地可以得到结论:“多参数查询”是指在运行时需要用户输入超过一个参数项目值。

实例3.9

查询在1986年出生的学生的全部信息。

操作步骤如下:

(1)在“数据库”窗口中,单击“对象”下的“查询”,在“数据库”窗口右侧的对象列表中双击“在设计视图创建查询”,打开查询的设计窗口,在数据环境中添加“学生”表,如图3-34所示。图3-34多参数查询设置

(2)把“学生”表的所有字段添加到“QBE”网格中。

(3)在“出生日期”字段的“条件”中键入下列内容:

Between[请输入开始时间:]And[请输入结束时间:]

(4)单击工具栏上的“保存”按钮  ,或选择“文件\保存”命令,在弹出的对话框中输入查询的名称“多参数查询”,以保存查询设计。

(5)单击工具栏上的“运行”按钮  。运行该查询时,需要在先后弹出的对话框中输入相应时间,如图3-35和图3-36所示。图3-35输入开始时间图3-36输入结束时间

(6)单击“确定”按钮后得到结果集,如图3-37所示。

(7)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称“多参数查询”,以保存查询设计。图3-37多参数查询结果集 3.4创建交叉表查询实例

3.4.1使用向导创建交叉表查询

使用交叉表查询可以计算并重新组织数据的结构,这样可以更加方便地分析数据。交叉表查询计算数据的总计、平均值、计数或其他类型的总和,这种数据可分为两组:一组在数据表左侧排列,另一组显示在数据表的顶端。

实例3.10使用向导创建交叉表查询,创建一个查询学生所学课程成绩总和的查询。操作步骤如下:

(1)在“数据库”窗口中,单击工具栏上的“新建”按钮,在打开的“查询向导”对话框中单击“交叉表查询向导”,然后单击“确定”按钮。

(2)打开“交叉表查询向导”对话框(一),如图3-38所示,选择查询的数据源表——“成绩”表,并单击“下一步”按钮。图3-38“交叉表查询向导”对话框(一)提示:使用交叉表查询向导创建交叉表查询时,数据源只能是一个表或一个查询。

(3)打开“交叉表查询向导”对话框(二),如图3-39所示,选择一个字段作为“行标题”。在此选择“学号”字段,单击“下一步”按钮。图3-39“交叉表查询向导”对话框(二)

(4)打开“交叉表查询向导”对话框(三),如图3-40所示,选择一个字段作为“列标题”。在此选择“课程号”字段,单击“下一步”按钮。图3-40“交叉表查询向导”对话框(三)

(5)打开“交叉表查询向导”对话框(四),选择一个字段作为计算的交叉点。在此选择“成绩”字段,并在函数一栏中选择“求和”,如图3-41所示,单击“下一步”按钮。

提示:默认情况下,“是,包括各行小计”选项是选中的,它将会在结果集中生成一列。当选择的函数是“求和”时,将返回某个学生参加的所有考试成绩的总和;当选择函数“计数”时,将返回某个学生总共有多少门课程考试有成绩记录。

(6)打开“交叉表查询向导”对话框(五),在图3-42所示的窗口的文本框中输入查询名称“成绩_交叉表”,并选择默认的“查看查询”选项后,单击“完成”按钮,以查看结果集,如图3-43所示。图3-41“交叉表查询向导”对话框(四)图3-42“交叉表查询向导”对话框(五)图3-43交叉表查询结果集3.4.2使用设计器创建交叉表查询

实例3.11

仍以求学生所学课程成绩总和为例,使用设计器创建交叉表查询。

操作步骤如下:

(1)在“数据库”窗口中,单击“对象”下的“查询”,在“数据库”窗口右侧的对象列表中双击“在设计视图中创建查询”,打开查询的设计窗口,添加“学生”表、“课程”表和“成绩”表作为数据环境,如图3-44所示。

提示:在设计视图中创建交叉表查询时,可以从多个表或查询中选择字段。

(2)选择“查询\交叉表查询”命令,或单击工具栏上的“查询类型”按钮  右侧的向下箭头,从下拉菜单中选择“交叉表查询”命令,可以看到查询的标题变为“交叉表查询”,如图3-45所示。图3-44在查询的设计视图中添加表图3-45设置交叉表查询

(3)添加字段到“QBE”网格中,再添加一个自定义字段“总成绩∶成绩”。设置各字段的属性如图3-46所示。“总成绩∶成绩”字段的作用相当于图3-41所示向导中的“是,包括各行小计”的选项是选中的状态。图3-46设置各字段的属性

(4)单击工具栏上的“运行”按钮  ,运行该查询,得到结果集如图3-47所示。图3-47在数据表视图中查看交叉表查询结果集

(5)单击工具栏上的“保存”按钮 ,在打开的“另存为”对话框中输入查询的名称“各门课程成绩_交叉表查询”,以保存查询设计。表3-13个选项的具体说明

3.5在查询中使用条件操作实例

3.5.1在查询条件中使用的运算符

表3-2常用的运算符

1.算术运算符

“+”、“-”、“*”、“/”这几个符号就代表数学运算中的“加”、“减”、“乘”、“除”四种运算符号。使用“&”符号可以将两个表达式强制连接在一起,比如输入“"数据库"&"使用指南"”,将返回“"数据库使用指南"”,即“&”将两个字符串连接在一起,左面的字符串在前面,右面的字符串在后面。

2.比较运算符

比较运算符可以是“=”(等于)、“>”(大于)、“<”(小于)、“>=”(大于或等于)、“<=”(小于或等于)、“<>”(不等于),它们都用来判断某个条件是否满足。例如:“=34”表示当某个值等于34时才满足这个条件;“<>"北京"”表示当某个值不等于字符串“"北京"”时才满足条件。

提示:在“条件”单元中输入表达式时,“=”可以省略。

3.逻辑运算符

“And”、“Or”、“Not”这三个逻辑运算符是用来连接上面这些条件表达式的。比如:“>100And<300”就表示只有某个值大于100并且小于300时才能算条件满足;“>100Or<300”则表示这个值要大于100或者小于300,实际上就是任何数都满足这个条件;“Not>100”这个表达式则表示只要这个值不大于100,这个条件就算满足了。3.5.2通配符的使用

Access中的通配符包括“*”、“?”、“#”等。其中“*”代表一个任意字符串;“?”代表一个任意字符;“#”代表一个任意数字字符。例如:要查找姓张的同学,可以在“姓名”字段的“条件”单元格中设置条件为“Like"张*"”。这里的“Like”常常用于对一个字符型的值进行逻辑判断,看这个值是否满足某种格式类型。因此,“Like”通常并不单独使用。实例3.12

在设计视图中创建一个查询,查询考试不及格的学生。

操作步骤如下:

(1)在查询的设计视图中新建一个查询。

(2)添加“学生”和“成绩”表到数据环境中,将“学生”表中的“班级名称”字段和“成绩”表中的所有字段添加到“QBE”网格中。

(3)在“成绩”字段的“条件”单元格中键入“<60”。如图3-48所示。图3-48设置查询条件

(4)单击工具栏上的“运行”按钮 ,运行该查询,得到结果集,如图3-49所示。图3-49查询条件中使用比较运算符的结果集

(5)单击工具栏上的“保存“按钮 ,在打开的“另存为”对话框中输入查询的名称“不及格情况”,以保存查询设计。

实例3.13

在设计视图中创建一个查询,查找所有来自河北的学生的详细信息。

操作步骤如下:

(1)在查询的设计视图中新建一个查询。

(2)添加“学生”表到数据环境中,将“学生”表中的所有字段添加到“QBE”网格中。

(3)在“生源地”字段的“条件”单元格中键入“Like"河北"&"*"”或“Like"河北*"”,如图3-50所示。图3-50在查询条件中使用Like运算符

(4)单击工具栏上的“运行”按钮  ,运行该查询,得到结果集,如图3-51所示。图3-51查询条件中使用Like运算符的结果集

(5)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称“生源地为河北的学生”,以保存查询设计。3.5.3在查询条件中使用函数

Access中提供了丰富的内置函数,我们可以在“表达式生成器”中找到它的踪影。“表达式生成器”对话框可以在编辑查询条件时通过单击工具栏上的“生成器”按钮  而获得。

查询中常用的函数见表3-3。表3-3查询中常用的函数

实例3.14

查询“教师”表中工作时间超过10年的同志,显示他们的详细信息。

操作步骤如下:

(1)在查询的设计视图中新建一个查询。

(2)添加“教师”表到数据环境中,将“教师”表中的所有字段添加到“QBE”网格中。

(3)在“工作时间”字段的“条件”单元格中键入:DateDiff("yyyy",[教师]![工作时间],Date())>10,如图3-52所示。图3-52在查询条件中使用函数提示:也可以在“工作时间”字段的“条件”单元格中单击,然后单击工具栏上的“生成器”按钮 ,打开“表达式生成器”对话框,双击“函数\内置函数”,在右侧的列表框中双击函数DateDiff(),如图3-53所示;输入日期格式,并选择“教师”表中的“工作时间”字段及函数Date()。表达式输入完成后,单击“确定”按钮。图3-54在数据表视图中查看满足函数条件的结果集

(5)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称“工作10年以上的教师”,以保存查询设计。图3-54在数据表视图中查看满足函数条件的结果集

(5)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称“工作10年以上的教师”,以保存查询设计。 3.6在查询中进行计算操作实例

3.6.1使用Sum函数进行总计计算

Sum函数的作用是对数字、日期/时间、货币和自动编号进行求和。

格式:Sum(字段名或表达式);

示例:对“成绩表”中的“成绩”字段求和,函数为Sum(成绩)。

实例3.15统计每个学生所参加考试的成绩总和,并按总成绩从高到低排序。操作步骤如下:

(1)在查询的设计视图中新建一个查询。

(2)添加“成绩”表到数据环境中,并把“成绩”表中的“学号”和“成绩”两个字段添加到“QBE”网格中。

(3)单击Access工具栏上的“总计”按钮  。

(4)在“学号”字段的“总计”单元格中选择默认的“GroupBy”;单击“成绩”字段的“总计”单元格,单击右侧的向下箭头,从下拉列表中选择“Sum”;在“成绩”字段的“字段”行单元格中输入“总成绩:成绩”,在“成绩”字段的“排序”单元格中选择“降序”,如图3-55所示。

(5)单击工具栏上的“运行”按钮  ,运行该查询,得到结果集,如图3-56所示。图3-55设置“总成绩查询”的各字段图3-56使用Sum函数的结果集

(6)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称“总成绩查询”,以保存查询设计。3.6.2使用Avg函数进行求平均计算

Avg函数的作用是对数字、日期/时间、货币和自动编号求平均值。

格式:Avg(字段名或表达式)。

实例3.16

统计每一门课程的平均分。

操作步骤如下:

(1)在查询的设计视图中新建一个查询。

(2)添加“成绩”表到数据环境中,并把“成绩”表中的“课程名称”和“成绩”两个字段添加到“QBE”网格中。图3-57设置“各门课程平均成绩”查询的各字段图3-58使用Avg函数的结果集3.6.3使用Count函数统计记录行数

Count函数的作用是统计记录行数。

格式:Count(字段名或表达式)。

实例3.17统计“学生”表中的学生人数。

操作步骤如下:

(1)在查询的设计视图中新建一个查询。

(2)添加“学生”表到数据环境中,并把“学生”表中的“学号”字段添加到“QBE”网格中。

(3)单击Access工具栏上的“总计”按钮  。

(4)单击“学号”字段的“总计”单元格,单击右侧的向下箭头,从下拉列表中选择“Count”;在“学号”字段的“字段”行单元格中输入“学生总人数∶学号”,如图3-59所示。

(5)单击工具栏上的“运行”按钮  ,运行该查询,得到结果集,如图3-60所示。图3-59“学生总人数”查询的设计视图

(6)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称“学生总人数”,以保存查询设计。图3-60使用Count函数查询学生总人数的结果集

实例3.18

统计“学生”表中各班的学生人数。

操作步骤如下:

(1)在查询的设计视图中新建一个查询。

(2)添加“学生”表到数据环境中,并把“学生”表中的“班级名称”和“学号”字段添加到“QBE”网格中。

(3)单击Access工具栏上的“总计”按钮  。

(4)在“班级名称”字段的“总计”单元格中选择默认的“GroupBy”;单击“学号”字段的“总计”单元格,单击右侧的向下箭头,从下拉列表中选择“Count”;在“学号”字段的“字段”行单元格中输入“总人数 : 学号”,如图3-61所示。

(5)单击工具栏上的“运行”按钮  ,运行该查询,得到结果集,如图3-62所示。图3-61“班级人数”查询的设计视图图3-62使用Count函数查询班级人数的结果集

(6)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称“班级人数”,以保存查询设计。

实例3.19统计“教师”表中各类职称的人数。

操作步骤如下:

(1)在查询的设计视图中新建一个查询。

(2)添加“教师”表到数据环境中,并把“教师”表中的“职称”和“教师编号”字段添加到“QBE”网格中。

(3)单击Access工具栏上的“总计”按钮  。

(4)在“职称”字段的“总计”单元格中选择默认的“GroupBy”;单击“教师编号”字段的“总计”单元格,单击右侧的向下箭头,从下拉列表中选择“Count”;在“教师编号”字段的“字段”行单元格中输入“总人数∶教师编号”,如图3-63所示。

(5)单击工具栏上的“运行”按钮  ,运行该查询,得到结果集,如图3-64所示。图3-63“各类职称分布情况”查询的设计视图图3-64使用Count函数查询职称分布情况的结果集

(6)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称“各类职称分布情况”,以保存查询设计。3.6.4使用Max函数计算字段的最大值

Max函数的作用是求出指定字段中的最大值。

格式:Max(字段名或表达式)。

实例3.20求每一门课程的最高分。

操作步骤如下:

(1)在查询的设计视图中新建一个查询。

(2)添加“成绩”表到数据环境中,并把“成绩”表中的“课程号”和“成绩”两个字段添加到“QBE”网格中。

(3)单击Access工具栏上的“总计”按钮  。

(4)在“课程号”字段的“总计”单元格中选择默认的“GroupBy”;单击“成绩”字段的“总计”单元格,单击右侧的向下箭头,从下拉列表中选择“Max”,如图3-65所示。图3-65“各门课程最高成绩”查询的设计视图

(5)单击工具栏上的“运行”按钮  ,运行该查询,得到结果集,如图3-66所示。

(6)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称“各门课程最高成绩”,以保存查询设计。图3-66使用Max函数的结果集3.6.5使用Min函数计算字段的最小值

Min函数的作用是求出指定字段中的最小值。

格式:Min(字段名或表达式)。

实例3.21

求每一门课程的最低分。操作步骤如下:

(1)在查询的设计视图中新建一个查询。

(2)添加“成绩”表到数据环境中,并把“成绩”表中的“课程号”和“成绩”两个字段添加到“QBE”网格中。

(3)单击Access工具栏上的“总计”按钮  。

(4)在“课程号”字段的“总计”单元格中选择默认的“GroupBy”;单击“成绩”字段的“总计”单元格,单击右侧的向下箭头,从下拉列表中选择“Min”,如图3-67所示。

(5)单击工具栏上的“运行”按钮  ,运行该查询,得到结果集,如图3-68所示。

(6)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称“各门课程最低成绩”,以保存查询设计。图3-67“各门课程最低成绩”查询的设计视图图3-68使用Min函数的结果集3.6.6添加自定义计算字段

计算字段是在查询中定义的字段,它显示的是表达式的结果而不是存储的数据。每当表达式中的值改变时,就重新计算一次该值。添加自定义计算字段的步骤如下:

(1)在查询的设计视图中新建一个查询。

(2)在“字段”行的空单元格中键入表达式。如果该表达式包含字段名,则必须用括号将字段名称括起。按Enter键或移到另一单元格之后,MicrosoftAccess将输入名为“表达式N”的默认字段,其中N是查询中随每一个新的表达式字段递增的整数,如“表达式1”。名称将显示在表达式的前方,后面接着一个冒号(半角的冒号)。在数据表中,此名称显示为列标题(用户可根据实际需要自行更改)。

(3)保存并运行查询。

实例3.22求每个学生所有参加考试课程的总分。

操作步骤如下:

(1)在查询的设计视图中创建一个空查询。

(2)在数据环境中添加“成绩”表,并把“学号”字段添加到“QBE”网格中。

(3)在“学号”字段后的空单元格中键入或使用“表达式生成器”生成表达式“Sum([成绩]![成绩])”,Access会自动添加一个名为“表达式1”的字段名,该字段名变为“表达式1:Sum([成绩]![成绩])”,将“表达式1”改为“总成绩”。

(4)单击Access工具栏上的“总计”按钮  。

(5)在“学号”字段的“总计”单元格中选择默认的“GroupBy”;单击“成绩”字段的“总计”单元格,单击右侧的向下箭头,从下拉列表中选择“Expression”,如图3-69所示。

(6)单击工具栏上的“运行”按钮  ,运行该查询,得到结果集,如图3-70所示。图3-69“学生总成绩_自定义计算字段”查询的设计视图图3-70使用计算字段的结果集

(7)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称“学生总成绩_自定义计算字段”,以保存查询设计。

提示:如果表达式中包含一个或多个聚合函数(Sum、Avg、Count、Min、Max、StDev或Var),并且设计网络包含另一个或多个用于分组的字段,可单击工具栏上的“总计”按钮  (如果“总计”行还没有显示)。对分组字段,“总计”单元格中保持默认的GroupBy,而在计算字段中,将GroupBy更改为Expression。

3.7操作查询创建实例

3.7.1认识操作查询

操作查询的结果不像选择查询那样显式地打开着,要想看到操作查询的结果,需要在数据窗口中打开相应的表,并查看相关记录是否已被成功删除或追加等。操作查询包括以下四种类型:生成表查询,更新查询、删除查询和追加查询。3.7.2生成表查询

生成表查询可以根据一个或多个表中的全部或部分数据创建新表。生成表查询有助于创建表以导出到其他MicrosoftAccess数据库中或包含所有旧记录的历史表。

实例3.23

在教学管理数据库中,根据“学生”表创建一个生成表查询,用它来完成从“学生”表导出部分数据生成新表“04软件技术1班”。操作步骤如下:

(1)在查询的设计视图中新建一个查询,并把“学生”表添加到数据环境中。

(2)选择“查询\生成表查询”命令,或单击工具栏上的“查询类型”按钮  右侧的向下箭头,从下拉菜单中选择“生成表查询”,打开如图3-71所示的“生成表”对话框。图3-71“生成表”对话框

(3)在“生成表”对话框的“表名称”文本框中,可以为新生成的表添加一个名称,这里键入“04软件技术1班”;为新表选择保存位置,在此选择“当前数据库”,生成的新表仍在当前数据库中。如果选择了“另一数据库”,则在下面的文本框中输入另一个已存在的数据库名称或单击“浏览”按钮选择数据库文件。完成后单击“确定”按钮。

(4)从源表中选择生成新表所需要的字段。一般情况下,为了保证源表与生成表在结构上的一致,在此选择“学生”表中的所有字段;在“班级名称”字段的“条件”单元格中输入“04软件技术1班”,如图3-72所示。

(5)单击工具栏上的“运行”按钮  ,运行查询时,系统会打开如图3-73所示的提示框,单击“是”按钮,开始执行查询。图3-72生成表查询的设计视图图3-73生成表查询提示框

(6)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称,以保存查询设计。

(7)按F11键,返回“数据库”窗口,单击“对象”下的“表”,出现了一个名为“04软件技术1班”的新表,打开该表,表中有3条记录。3.7.3更新查询

更新查询可以对一个或多个表中的一组记录进行全局更改。使用更新查询,可以更改已有表中的数据。

实例3.24在教学管理数据库中,为“学生”表创建一个更新查询,用它来把“学生”表中的原专业名称“多媒体”更新为“多媒体技术”。操作步骤如下:

(1)在查询的设计视图中新建一个查询,并把“学生”表添加到数据环境中。

(2)选择“查询\更新查询”命令,或单击工具栏上的“查询类型”按钮  右侧的向下箭头,从下拉菜单中选择“更新查询”,添加“更新到”行。

(3)将“专业名称”字段添加到“QBE”网格中,在“专业名称”字段的“条件”单元格中输入“多媒体”,在“更新到”单元格中输入“多媒体技术”,如图3-74所示。

(4)单击工具栏上的“运行”按钮  ,运行查询时,系统会打开如图3-75所示的提示框,单击“是”按钮,开始执行查询。

(5)单击工具栏上的“保存”按钮  ,或选择“文件\保存”命令,在打开的“另存为”对话框中输入查询的名称,以保存查询设计。

(6)按F11键,返回“数据库”窗口,单击“对象”下的表,双击“学生”表查看查询的运行结果。图3-74更新查询设计视图图3-75更新查询提示框3.7.4删除查询

删除查询可以从一个或多个表中删除一组记录。例如,可以使用删除查询来删除“学生”表中已退学的学生。使用删除查询,通常会删除整个记录,而不只是记录中所选择的字段。

实例3.25在教学管理数据库中,从“学生”表创建一个删除查询,用它来完成从“学生”表中删除名为“王伟”的学生。操作步骤如下:

(1)在查询的设计视图中新建一个查询,并把“学生”表添加到数据环境中。

(2)选择“查询\删除查询”命令,或单击工具栏上的“查询类型”按钮  右侧的向下箭头,从下拉菜单中选择“删除查询”,添加“删除”行。

(3)在“QBE”网格中添加“姓名”字段,在“条件”单元格中输入“王伟”,如图3-76所示。

(4)单击工具栏上的“运行”按钮  ,运行查询时,系统会打开如图3-77所示的提示框,单击“是”按钮,开始执行删除查询。图3-76删除查询的设计视图图3-77删除查询提示框

(5)单击工具栏上的“保存”按钮  ,在打开的“另存为”对话框中输入查询的名称,以保存查询设计。

(6)按F11键,返回“数据库”窗口,单击“对象”下的表,双击“学生”表查看删除查询的运行结果。3.7.5追加查询

追加查询用于将一个或多个表中的一组记录添加到一个或多个表的末尾。例如,学校通过补录获得了一些新的学生以及包含这些学生信息的数据库,若要避免在自己的数据库中键入所有这些信息,最好将其追加到“学生”表中。

实例3.26在教学管理数据库中以“学生”表为目的表创建一个追加查询,用它来完成从“补录学生”表中追加数据到“学生”表中。操作步骤如下:

(1)在查询的设计视图中新建一个查询,并把“补录学生”表添加至数据环境中。

(2)选择“查询\追加查询”命令,或单击工具栏上的“查询类型”按钮  右侧的向下箭头,从下拉菜单中选择“追加查询”,添加“追加到”行,打开如图3-78所示的“追加”对话框。图3-78“追加”对话框

(3)在“表名称”文本框的下拉列表中选择“学生”表,单击“确定”按钮。

(4)从源表中选择要添加到目的表中的字段。为了保证追加成功,一般情况下源表与目的表在字段结构上要求一致(数据类型及顺序)。在此,选择“补录学生”表中的全部字段,如图3-79所示。图3-79追加查询设计视图

(5)单击工具栏上的“运行”按钮  ,运行查询时,系统会打开如图3-80所示的提示框,单击“是”按钮,开始执行追加查询。图3-80追加查询提示框

(6)单击工具栏上的“保存”按钮  ,或选择“文件\保存”命令,在打开的“另存为”对话框中输入查询的名称,以保存查询设计。

(7)按F11键,返回“数据库”窗口,单击“对象”下的表,双击“学生”表查看追加查询的运行结果。 3.8创建SQL查询

3.8.1SQL查询概述

SQL查询是使用SQL语句创建的查询。可以用结构化查询语言(SQL)来查询、更新和管理MicrosoftAccess这样的关系数据库。SQL是用来管理关系数据库及其数据的一种标准语言,它出现在20世纪70年代。1989年美国国家标准协会(ANSI)制定了ANSISQL89标准,在1992年又制定了ANSISQL92标准。所有的关系数据库都遵循这些标准,但不同的产品其SQL版本又存在一些差别(主要是对标准的SQL进行了一些扩展)。

Access中的SQL是MicrosoftJetSQL。Access所有的查询事实上都可以认为是一个SQL查询,因为Access查询就是以SQL语句为基础来实现查询功能的,不过在建立Access查询时并不是所有的查询都可以在系统所提供的查询设计视图中进行创建。

在查询设计视图的属性表中,大多数查询属性在SQL视图中都有等效的可用子句和选项。如果需要,可以在SQL视图中查看和编辑SQL语句。但是,在对SQL视图中的查询做更改之后,查询可能无法用以前在设计视图中所显示的方式进行显示。

SQL查询可以分为四类:联合查询、传递查询、数据定义查询和子查询。

(1)联合查询:该查询使用Union运算符来合并两个或更多选择查询的结果。

(2)传递查询:SQL特定查询,可以用于直接向ODBC数据库服务器发送命令。通过使用传递查询,可以直接使用服务器上的表,而不用让MicrosoftJet数据库引擎处理数据。

(3)数据定义查询:包含数据定义语言(DDL)语句的SQL特有查询。这些语句可用来创建或更改数据库中的对象。

(4)子查询:它是一个Select语句,嵌套在Select、Insert、Update与Delete语句或其他的子查询语句中。3.8.2创建SQL查询

要想在Access中建立SQL查询,首先要建立一个新的查询,然后选择“视图\SQL视图”命令,这样在屏幕上就出现了一个文本窗口,用来书写SQL语句。将用到的SQL语句输入完毕后,再选择“视图\数据表视图”命令,就可以看到刚才SQL语句所起的作用了。下面针对SQL查询给出相应的SQL语句。

1.联合查询

实例3.27以教学管理数据库中的“学生”表与“教师”表为源数据,查询每一个教师及学生的姓名与性别。

操作步骤如下:

(1)在查询的设计视图中新建一个查询,不添加任何表。

(2)选择“查询\SQL特定查询\联合”命令,直接进入SQL视图,标题栏变为“联合查询”。

(3)在SQL视图中键入如下代码:

Select姓名,性别From教师

Union

Select姓名,性别From学生

(4)单击工具栏上的“运行”按钮  ,联合查询的结果集如图3-81所示。

(5)单击工具栏上的“保存”按钮  ,保存查询。图3-81联合查询的结果集

2.数据定义查询

实例3.28在示例数据库中创建一个新表“系部”表。

操作步骤如下:

(1)在查询的设计视图中新建一个查询,不添加任何表。

(2)选择“查询\SQL特定查询\数据定义查询”命令,直接进入SQL视图,标题栏变为“数据定义查询”。

(3)在SQL视图中键入如下代码:

CreateTable系部

(系部编号Integer,

 系部名称Varchar(20),

 系主任Varchar(20),

 备注Text)

(4)单击工具栏上的“运行”按钮  ,生成一个数据定义查询的结果集,如图3-82所示。

(5)单击工具栏上的“保存”按钮  ,保存查询。数据定义查询的结果集

图3-82数据定义查询的结果集

3.子查询

实例3.29在示例数据库中查询每一个学生所有课程成绩中最高的得分。

操作步骤如下:

(1)在查询的设计视图中新建一个查询,不添加任何表。

(2)选择“视图\SQL视图”命令,切换到SQL视图。

(3)在SQL视图中键入如下代码:

Select学生.学号,学生.姓名,(SelectMax(成绩)From成绩Where学生.学号=成绩.学号)As最高得分

From学生

Where((((SelectMax(成绩)From成绩Where学生.学号=成绩.学号))<>False))‘

(4)单击工具栏上的“运行”按钮  ,子查询的结果集如图3-83所示。

(5)单击工具栏上的“保存”按钮  ,保存查询。图3-83子查询的结果集

4.传递查询

传递查询是一种关于连接其他数据库的操作,创建步骤如下:

(1)在查询的设计视图中新建一个查询,不添加任何表。

(2)选择“查询\SQL特定查询\传递”命令,标题栏变为“SQL传递查询”。

(3)单击工具栏上的“属性”按钮  ,以显示查询属性表。

(4)在查询属性表中设置“ODBC连接字符串”属性,来指定要连接的数据库信息。可以输入连接信息,或单击“生成器”按钮 ,然后输入要连接的服务器信息。有关查询语法的详细内容,请参阅发送查询的SQL数据库服务器文档。

(5)如果查询不是能返回记录的类型,请将“返回记录”属性设置为“否”。

(6)在“SQL传递查询”窗口中输入传递查询代码。

本章小结

本章学习了如何在Access中进行查询设计与创建查询。

创建查询的方式有使用向导创建查询和使用设计视图创建查询两种。通过本章的学习,了解了查询在不同视图下的表现形式,学习了如何利用设计视图与向导去创建多种不同种类的查询,如选择查询、参数查询、交叉表查询与操作查询(生成表查询、更新查询、删除查询及追加查询)等,以及如何利用表达式或函数去实现一些实用功能需求。

复 习 思 考 题

1.查询的作用是什么?

2.在Access中有哪些类型的查询?它们的作用是什么?

3.在Access中查询的视图类型有哪些?

4.在Access中的操作查询有哪些?它们的作用是什么?

5.在Access中使用向导创建查询的操作流程是什么?

6.在Access中如何使用设计视图创建不同类型的查询,如参数查询或交叉表查询?

上机实验3查询的创建与应用

1.实验目的

(1)掌握使用查询向导及查询设计器创建查询的方法(实现选择查询)。

(2)掌握创建参数查询的方法。

(3)掌握创建交叉表查询的方法。

(4)掌握使用查询条件的方法(使用表达式与函数)。

(5)掌握创建操作查询的方法。

2.实验内容

(1)在设计视图中创建一个查询,查找所有姓张的学生的详细信息。

①在查询的设计视图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论