实验四 查询的创建和使用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验课程基本情况
实验项目及指导教师
实验四查询的创建和使用(一)
一、教学目的
通过本实习应达到以下目标:
1、理解查询的定义和了解查询的功能
2、能够熟练的切换查询的各种视图
3、掌握选择查询、差数查询的创建和使用。

4、能够在查询中进行计算
5、能够使用查找重复项查询向导创建查询
二、实验内容(在之前的数据库的基础上)
项目一:
创建一个查询,用于筛选出1982年出生的男性会员记录,将此查询命名为“1982年出生的男会员”。

项目二:
建立一个多表查询,查看图书的完整信息,包括图书的“类别编号”、“类别名称”、“图书编号”、“图书名称”、“图书价格”和“图书数量”6个字段。

将此查询命名为“全部图书”。

项目三:
创建一个多表外联结查询,它用于查看没有任何图书信息的类别。

将此查询命名为“没有图书的类别”。

项目四:
使用“简单查询向导”创建一个名为“图书信息”的查询,其查询的数据来自于“类别”和“图书”这两张表。

项目五:
建立一个查询,按输入的会员编号查看会员的信息。

将此查询命名为“按会员编号查询”。

项目六:
建立一个查询,查看会员的出生日期分布情况,结果中要求列出会员的“编号”(计数)、“性别”(分组)和“生日”(最大值和最小值)。

将此查询命名为“会员生日统计”。

项目七:
建立一个总计查询,用于按类别统计图书的价格情况,包括每一类图书的平均价格、最低价格和最高价格。

将这个查询命名为“图书价格分类汇总”。

项目八:
建立一个查询,用于查看每一种图书的总价格,即计算出每一种图书的价格与数量的乘积。

将这个查询命名为“图书总价格”。

项目九:
使用“查询重复项查询向导”建立一个查询,用于计算出每个类别中包含的图书数量,将此查询命名为“图书数量分类统计”。

三、仪器、设备、材料
1.微机
四、实验准备
1.理论知识预习及要求
在本实习前应该掌握查询的定义和功能,掌握选择查询和参数查询创建的方法,并会在查询中进行计算。

2.实验指导书预习及要求
在本次实习前,请认真审阅题目,并确定绘制方法,以便在绘制时能够顺利完成。

3.其他准备
五、实验原理或操作要点简介
六、注意事项
七、实验过程与指导
项目一实现:
打开数据库
打开查询设计器
选择查询数据的来源表
为查询添加相应字段(可通过拖拽的方法或双击)
输入查询准则((会员.性别)=“男”,(会员.生日)Between #1/1/1982# And
#12/31/1982#))
项目二实现:
打开数据库
打开查询设计器
选择查询数据的来源表
为查询添加相应字段(可通过拖拽的方法或双击)
项目三实现:
打开查询的设计视图,添加“类别”和“图书”表
在查询设计视图中,双击“类别”和“图书”表之间的连线,会弹出“联结属性”对话框,选择“2”单选按钮,即建立了“左联结”。

添加类别编号、类别名称字段和类别字段,在“条件”行中,对“图书”表中的“类别”字段设置“Is Null”
将该查询以“没有图书的类别”为名称保存,单击运行命令,查看结果。

假如“经管”类别没有对应的图书那么查询结果如下:
项目四实现:
打开简单查询向导窗口,从“类别”表中选择所有字段,从“图书”表中选择所有字段,然后单击下一步,根据向导默认的设置往下走,在需要输入标题的时候,输入“图书信息”,最后点击完成即可。

项目五实现:
打开数据库
打开查询设计器
选择查询数据的来源表
为查询添加相应字段(可通过拖拽的方法或双击)
为编号字段添加准则:[请输入会员的编号:]
项目六实现:
打开数据库
打开查询设计器
选择查询数据的来源表
为查询添加相应字段(可通过拖拽的方法或双击),生日需要添加两次点击工具栏上的总计按钮,并在总计行上选择函数的名称
项目七实现:
步骤和上题一样
项目八实现:
打开数据库
打开查询设计器
选择查询数据的来源表
为查询添加相应字段(可通过拖拽的方法或双击)
手动的添加一个字段,总价格:[价格]*[数量]
项目九实现:
点击新建按钮,选择“查询重复项查询向导”
选择“图书”表->“类别”->完成
八、思考与提高
例4-1
建立名为“江苏的学生”的查询,从“学生情况”表查看家庭所在地是江苏的那些学生的学号、姓名和家庭所在地,并按学号降序排列。

•这个查询的SELECT语句是:
SELECT学号,姓名,家庭所在地
FROM 学生情况
WHERE 家庭所在地=“江苏”
ORDER BY 学号 DESC;
使用设计视图的方法如下:
1)依次双击所要查找的字段(本题为学号、姓名和家庭所在地三个字段),这些字段及其所在的表名显示在查询设计网格(即“设计”视图的下半部)中;
2) 根据具体问题,需要时在查询设计网格中的“排序”、“显示”、“条件”和“或”行选择或输入恰当的内容;在学号字段的“排序”行选择“降序”,在家庭所在地字段的“条件”行输入:江苏,如下页图所示。

例4-2
建立名为“最高的三名学生”的查询,从“学生情况”表查看所有字段,只显示最高的三名学生,并且查询结果是只读的。

例4-3
建立名为“学生来源地”的查询,从“学生情况”表查看所有家庭所在地(以“来源地”显示),但结果不要重复显示(即同一个家庭所在地只显示一个记录)。

(演示)
按前面所述的步骤创建查询,并在字段“家庭所在地”前后加上:来源地:。

再打开它的“查询属性”窗口,将其中的“唯一值”属性项设为“是”(下页图),最后以“学生来源地”为名保存该查询。

例4-4 创建查询“排序的江苏学生”,从“学生情况”表查看家庭所在地是江苏的那些学生的学号、姓名、班级代号和性别,分别按两种方式排序:(A)先按班级代号升序,再按性别升序,(B)先按性别升序,再按班级代号升序。

(演示)
不同优先次序的运行结果见下页图。

例4-5 创建查询“75年及以后出生的江苏和上海学生”,从“学生情况”表查看学号、姓名、家庭所在地、出生年月日。

条件为:家庭所在地是江苏或上海,并且是1975年
及以后出生。

(演示)
•对本题,条件的逻辑表达式可以用多种方式表示,下面是其中的两种:
([家庭所在地]=”江苏” And [出生年月日]>=#1975-1-1# )Or ([家庭所在地]=”
上海” And [出生年月日]>=#1975-1-1# )
或:
([家庭所在地]=”江苏” Or [家庭所在地]=”上海”)And Year([出生年月日])>=1975 •本题逻辑表达式的第一种表示法的前一部分:
([家庭所在地]=”江苏” And [出生年月日]>=#1975-1-1# )
是“与”关系,在设计网格中用下图的方式表示。

•而后一部分:
([家庭所在地]=”上海” And [出生年月日]>=#1975-1-1# )
也是“与”关系,在设计网格中用下图的方式表示。

•前后两部分之间是“或”关系。

因此,对应逻辑表达式第一种表示法的设计网格如下图所示。

•对应本题逻辑表达式第二种表示法的设计网格如下图所示。

•下图对本题来说是一个典型错误,它表达的是另一个查询条件:75年及以后出生的江苏学生或者是上海学生。

例4-6 创建查询“到今天满22岁但不是江苏来的学生”,从“学生情况”表查看学号、姓名、家庭所在地、出生年月日。

条件是:到今天年满22岁,但家庭所在地不是江苏,
并按出生年月日升序排列。

•日期函数的使用。

•本题条件的逻辑表达式是:
DateAdd(“yyyy”, 22, [出生年月日])<=Date() And Not ([家庭所在地]=”江苏”)
•对应的设计网格如下页图所示。

•“条件”行的逻辑表达式既可以直接输入,也可以使用“表达式生成器”来辅助生成。

•将光标定位在要填表达式处,单击工具栏的“生成器”按钮(或通过快捷菜单选“生成器”项)可打开“表达式生成器”对话框。

•下面是使用“表达式生成器”来辅助生成条件“今天年满22岁”的操作步骤。

1) 将光标定在设计网格中的“出生年月日”字段的条件行;单击工具栏上的“生成器”按钮;
2)在系统弹出的“表达式生成器”对话框中下部左窗格中双击“函数”,在打开的下级目录中单击“内置函数”;
3)在对话框的下部右窗格中双击内置函数DateAdd,则在对话框上部的表达式窗格中出现函数DateAdd的一般表达式
3)在对话框的下部右窗格中双击内置函数DateAdd,则在对话框上部的表达式窗格中出现函数DateAdd的一般表达式(下图);
4)将一般表达式改为DateAdd(“yyyy”,22, [学生情况]![出生年月日] ),其中前两项参数直接输入,第3项可以通过在对话框中下部左窗格中双击“表”,在打开的下级目录中单击“学生情况”,在中间窗格双击“出生年月日”,就确定了函数的第3个参数,见下页图。

5)在上述函数后面补上:<=Date(),其中Date()也可以通过“内置函数”选取。

•该查询保存后再打开其“设计”视图,其设计网格变成另一种形式(下图),实质与4.2.9续九的图是相同的。

图中最右一列就是将要在4.3.2节介绍的计算字段。

例4-7 创建查询“上海广东北京三地78年出生的学生”,从“学生情况”表查看学号、姓名、家庭所在地、出生年月日。

条件是:1978年出生,并且家庭所在地是上海或广东或北京。

•本题条件的逻辑表达式是:
[家庭所在地] In (“上海”,“广东”,”北京”) And [出生年月日] Between
#1978-1-1# And #1978-12-31#
•对应的设计网格如下页图所示。

例4-8 创建查询“未确定家庭所在地的学生”,从“学生情况”表查看学号、姓名和家庭所在地,条件是家庭所在地未确定。

•由于空值和空字符串都是未确定,所以本题条件的逻辑表达式是:
[家庭所在地]=”” Or [家庭所在地] Is Null
•对应的设计网格如下图所示。

例4-9 创建查询“全校学生家庭收入”,从“学生情况”表查看学校人数、平均家庭收入、最高家庭收入,最低家庭收入(皆指家庭人均月收入)。

(演示)
•该查询的创建方法和前面几例差不多,仅增加如下操作:
•单击工具栏上的“总计”按钮,在设计网格中就出现“总计”行,然后按题意选定查询字段并输入计算字段名,再确定各字段“总计”行的选项。

需要指出的是:
•本题对学号进行Count计算的实际意义就是统计全校人数。

•计算字段名必须和对应的“总计”行的选项相符。

•本题完成后的设计网格如下页图所示。

例4-10 创建查询“各人考试成绩”,从“选课及成绩”表查看按人分组统计的学号、选课门数、平均分、最高分和最低分(都是考试成绩),并按平均分降序排列。

(演示)
•本题的创建操作和例4-9相同。

需要指出的是:本题按学号分组,就是统计每个人的成绩,而对学号进行Count计算恰是这个人选课的门数。

本题完成后的设计网格如下图所示。

•这个查询的SELECT语句是:
SELECT 选课及成绩.学号, Count(选课及成绩.学号) AS 选课门数, Avg(选课及成绩.考试成绩) AS 平均分, Max(选课及成绩.考试成绩) AS 最高分, Min(选课及成绩.考试成绩) AS 最低分
FROM 选课及成绩
GROUP BY 选课及成绩.学号
ORDER BY Avg(选课及成绩.考试成绩) DESC;
•其中的ORDER BY短语给出查询的分组字段及排序方式。

例4-11 创建查询“学期成绩”,从“选课及成绩”表查看学号、课程号、学期成绩、及格标志。

这里,学期成绩=平时成绩*0.3+考试成绩*0.7,及格标志根据学期成绩显示“及格”或“不及格”字样。

(演示)
•学期成绩是计算字段,即在字段行输入:学期成绩:平时成绩*0.3+考试成绩*0.7。

•及格标志也是一个计算字段,即在字段行输入:及格标志: IIf([学期成绩]>=60,“及格”,“不及格”)。

例4-12 创建查询“学生情况详单查询”,具体要求是以“班级简况”和“学生情况”两个表为数据源,查看两个表中的所有字段。

(演示)
•具体方法和以前的例题一样,只是在选择数据源时按题意选定两个表。

本题的“设计”视图如下页图所示。

例4-13 创建查询“学生选课详单查询”,具体要求是查看班级代号、班级名称、学号、姓名、课程号、课程名称、平时成绩、考试成绩、学期成绩。

并且设置排序优先次序为:班级代号升序、学号升序。

(演示)
•本题以“班级简况”、“学生情况”、“选科及成绩”、“课程档案”4个表为数据源,完成后的设计网格如下图所示。

例4-14 创建查询“没有学生的班级”,要求列出班级代号和班级名称,条件是:在“学生情况”表中没有这些班的学生。

(演示)
•本题以“班级简况”、“学生情况”两个表为数据源,但必须将联结改为“班级简况”左联结“学生情况”表。

具体操作步骤是:
(1)在“关系”窗口双击关系联结线,系统打开“联接属性”对话框(下页图);
(2)在“联接属性”对话框中选定左、右表的名称和左、右列的名称(即字段名);再选定联结类型;本题的表名称和列名称就取默认值,联接类型选第2项;单击“确定”按钮。

•这就将联接类型改成了“班级简况”表左联结“学生情况”表(下页图)。

•本题必须在“设计”视图的“班级代号”字段的条件行输入:Is Null。

下页图是本题的“设计”视图。

例4-23 创建参数查询“某地的学生”。

就是将例4-1中的查询条件改为由用户输入。

(演示)
•本题的设计网格如下页上图所示。

•运行参数查询时会出现“输入参数值”对话框(下页下图),在这个对话框中输入任何确定的值。

对于本题,如果要查看北京的学生,就输入:北京。

例4-24 创建参数查询“某月出生的学生”,要求是根据输入的月份,查找本月出生的全部学生的学号、姓名、出生年月日,并按出生年月日降序排列。

(演示)
•本题的设计网格如下图所示。

注意本题条件的表达方法:“字段”行是个表达式。

•如果设置的参数是文本型,不用指定参数的类型即可正确执行;如果是数值型或日期/时间型,最好指定参数的数据类型。

对于复杂的参数查询更要指定参数的数据类型。

•设置的方法是:选择“查询\参数”,打开“查询参数”对话框(下页图),在其中输入参数的名称并选定数据类型。

本例选整型。

对于本题,是否设定参数的类型还是有所不同。

例如对于3月,没设定数据类型时只能输入3,设定整型后输入03或3都可以。

例4-25 创建参数查询“某期间出生的学生”,要求根据用户输入的起止年月日,查找这期间出生的全部学生的学号、姓名、出生年月日,并按出生年月日升序排列。

(演示)
•本题的设计网格如下图所示。

注意本例的两个条件参数(起始日和截止日)都要设定为日期型。

例4-26 创建查询“各班平均身高”,要求输出班级代号,班级名称,平均身高。

(演示)
•下面结合本题说明使用“简单查询向导”创建查询的几个问题:
(1) 在“简单查询向导”对话框之一(下页图)中选择数据源和字段;
(2) 在“简单查询向导”对话框之二(下页图)中选择查询方式;如果选“汇总”,还要单击“汇总选项”按钮,在打开的“汇总选项”对话框(下下页图)中选定汇总方式;
(3) 在打开的“简单查询向导”对话框之三(下页图)中为查询指定标题。

例4-27 使用“交叉表查询向导”再做例4-22,查询名为“各班地区人数分布”。

(演示)
•先创建选择查询“各班地区人数分布准备”,从“班级简况”和“学生情况”两个表中查找班级代号、班级名称、学号、家庭所在地4个字段。

再以该查询“各班地区人数分布准备”作数据源创建查询“各班地区人数分布”。

•下面结合本题说明使用“交叉表查询向导”创建查询的两个问题:
(1) 在对话框之二(下页图)中选择作为行标题的字段。

本题选“班级代号”和“班级名称”作行标题。

(2) 在打开的对话框之四(下页图)中选择计算字段。

本题选“学号”为计算字段。

例4-28 创建查询“同名的学生”,输出学生情况表的学号、班级代号、姓名。

(演示)
•在具有一对多关系的主、子两个表中,对于主表中的每个记录,在子表中可能有多个记录与之对应,也可能没有记录与之对应。

•查找不匹配项查询就是在主表中查找那些在子表中没有记录与之对应的记录。

例4-29 创建查询“没有学生的班级_向导”,输出班级代号、班级名称。

(演示)
•操作提示:在“查找不匹配项查询向导”对话框之三(下页图)中指定两表的匹配字段。

•在具有一对多关系的主、子两个表中,对于主表中的每个记录,在子表中可能有多个记录与之对应,也可能没有记录与之对应。

•查找不匹配项查询就是在主表中查找那些在子表中没有记录与之对应的记录。

例4-29 创建查询“没有学生的班级_向导”,输出班级代号、班级名称。

(演示)
•操作提示:在“查找不匹配项查询向导”对话框之三(下页图)中指定两表的匹配字段。

•本题和例4-14本质上完全一样。

可见,需要用外联接的查询可以用“查找不匹配项查询向导”创建,而不必设置外联接。

九、实验总结。

相关文档
最新文档