Access数据库教程课件第3章 查 询_第1页
Access数据库教程课件第3章 查 询_第2页
Access数据库教程课件第3章 查 询_第3页
Access数据库教程课件第3章 查 询_第4页
Access数据库教程课件第3章 查 询_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

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

文档简介

第3章

查询3.1认识查询

1查询的功能2查询的类型3查询的准则将数据保存到数据表以后,就可以对数据进行分析和处理,查询功能就是用来完成对数据进行提取、分析和计算的。3.1.1查询的功能

查询实际上是将分散的数据按一定的条件重新组织起来,形成一个动态的数据记录集合,而这个记录集在数据库中并没有真正的存在,只是在查询运行时从查询源表的数据中提取并创建,数据库中只是保存查询的方式。当关闭查询时,动态数据集合会自动消失。3.1认识查询3.1.1查询的特点3.1认识查询表是存储数据的数据库对象,而查询则是对表中的数据进行检索、统计、分析、查看和更改的又一个非常重要的数据库对象。如果说,表是对数据进行了分割,那么查询则是将不同表的数据进行组合,它可以从多个表中查找到满足条件的记录组成一个动态集,以数据表视图的方式显示。查询仅仅是一个临时表,当关闭查询的数据表视图时,保存的是查询的结构。查询所涉及的是表、字段和筛选条件等,而不是记录。表和查询都是查询的数据源,查询是窗体、报表、数据访问页的数据源。建立查询之前,一定要先建立表与表之间的关系。3.1.2查询的类型Access有五种类型的查询为:选择查询、参数查询、交叉表查询、操作查询、SQL查询。3.1认识查询3.2创建选择查询1创建不带条件的选择查询

2创建带条件的选择查询

选择查询是最常见的查询类型,它可以从一个或多个表中提取数据,并且允许在可以更新记录的数据表中进行各种数据操作。有时也可以使用选择查询再对记录进行分组,并对记录作总计、计数、平均以及其它类型总和的计算。3.2.1创建不带条件的选择查询⑴.在数据库窗口中单击“查询”对象,然后双击“使用向导创建查询”选项,屏幕上显示“简单查询向导”第一个对话框⑵.选择要显示的字段3.2创建选择查询⑶.指定查询方式这里选择明细查询⑷.输入查询名称,也可以使用默认的名称⑸.单击“完成”按钮。3.2.2创建带条件的选择查询

查询有三种视图:设计视图、数据表视图和SQL视图。使用“设计视图”既可以创建查询也可以修改查询。3.2创建选择查询表对象设计网格3.2.2创建带条件的选择查询3.2创建选择查询查询窗口各项含义如下:字段:设置定义查询对象时要选择表对象的字段。表:设置字段的来源。排序:定义字段的排序方式。显示:设置选择的字段是否在数据表视图中显示出来。条件:设置字段限制条件。3.2.2创建带条件的选择查询例3-2:使用设计视图建立查询,查找“学生信息”表中政治面貌是“党员”的学生情况。⑴.单击“查询”对象,双击“在设计视图中创建查询”选项3.2创建选择查询⑵.在“显示表”对话框中,单击“表”选项卡,添加相应表⑶.选择所要显示的字段,及来源的“表”,并在字段列的“条件”行输入查询条件。如“党员”(4).单击工具栏上的“运行”按钮3.2.2创建带条件的选择查询例3-3

建立一个查询,查询第一学期选修“VB程序设计”的学生的学号,姓名及成绩情况,包含课程名称、学号、姓名、成绩、学期五个字段,成绩从高到低排列。3.2创建选择查询3.2.2创建带条件的选择查询

3.2创建选择查询如果上例显示成绩最高的3位学生,设置字段“成绩”的排序准则为“降序”,上限值设为3即可。

3.3.1查询的准则

查询准则是指在查询中用来限制检索记录的条件表达式。使用查询准则可以使查询结果中仅包含满足相应限制条件的数据记录。它是算术运算符、逻辑运算符、常量、字段值和函数等的组合。通过查询准则可以过滤掉不需要的数据。3.3设置查询条件3.3.1查询的准则运算符含义运算符含义+加*乘-减/除\整除^乘方mod求余(1)算术运算符1.准则中的运算符

3.3设置查询条件3.3.1查询的准则(2)关系运算符等于=小于<不等于<>大于等于>=小于等于<=大于>含义运算符含义运算符1.准则中的运算符

3.3设置查询条件3.3.1查询的准则(3)逻辑运算符运算符说明Not当Not连接的表达式为真时,整个表达式为假And当And连接的表达式都为真时,整个表达式为真,否则为假Or当Or连接的表达式有一个为真时,整个表达式为真,否则为假1.准则中的运算符

3.3设置查询条件3.3设置查询条件

3.3.1查询的准则

例3-4查询“VB程序设计”不及格的学生的学号和姓名。查询添加“学生信息”表、“学生成绩”表、“课程信息”表三张表

3.3.1查询的准则(4)其他运算符In该运算符右边的括号中指定一个字段值的列表,列表中的每一个值都可以与查询字段相匹配。In(“王梅”,“李岩”,“张磊”)表示查询的姓名为括号内的3个姓名之一。Between这个运算符用来指定一个字段值的范围,上下限值之间用And连接。

如果要表示0~100之间的数值,可以用如下表达式。Between0and1003.3设置查询条件3.3.1查询的准则和空值有关的运算符IsNull:用于指定一个字段为空。IsNotNull:用于指定一个字段为非空。例如,如果“出生日期”字段的准则行输入“IsNull”表示查找该字段值为空的记录。如果输入“IsNotNull”表示查找该字段值为非空的记录。(4)其他运算符3.3设置查询条件3.3.1查询的准则Like这个运算符由于在文本字段中指定查找模式,它通常和以下的通配符配合使用。“?”:表示该位置可以匹配任何一个字符。“*”:表示该位置可匹配零个或多个字符。(4)其他运算符“#”:表示该位置可匹配一个数字。“[]”:在方括号内描述可匹配的字符范围。,Like“王*”表示以“王”开始的字符串。

Like“[1-5]?”表示查找的字符串中第一位是1~5的数字,第二位是任意字符。3.3设置查询条件3.3.1查询的准则&这个运算符将两个字符串进行连接。表达式“How”&“areyou!”的结果是“Howareyou!”。3.3设置查询条件2.准则中使用的函数3.3.1查询的准则(1)数值函数函数功能Abs(数值表达式)返回数值表达式值的绝对值Int(数值表达式)返回数值表达式值的整数部分Sqr(数值表达式)返回数值表达式值的平方根Sgn(数值表达式)返回数值表达式值的符号值3.3设置查询条件3.3.1查询的准则(2)文本函数函数功能Space(n)返回由n个空格组成的字符串String(n,字符串表达式)返回由第二个参数的第一个字符组成的字符串,字符个数为n个Left(字符串表达式,n)从字符串表达式左侧第一个字符开始截取n个字符Right(字符串表达式,n)从字符串表达式右侧第一个字符开始截取n个字符Len(字符串表达式)返回字符串表达式中字符的个数Ltrim(字符串表达式)去掉字符串表达式的前导空格Rtrim(字符串表达式)去掉字符串表达式的尾部空格Trim(字符串表达式)去掉字符串表达式的前导空格和尾部空格Mid(字符串表达式,n1[,n2])从字符串表达式左边第n1位置开始,截取连续n2个字符3.3设置查询条件3.3.1查询的准则(3)日期时间函数函数功能Now()返回系统当前的日期时间Date()返回系统当前的日期Time()返回系统当前的时间Day(日期表达式)返回日期中的日Month(日期表达式)返回日期中的月份Year(日期表达式)返回日期的的年份Weekday(日期表达式,[w])返回日期中的星期Hour(时间表达式)返回时间中小时值Minute((时间表达式)返回时间中的分钟Second((时间表达式)返回时间中的秒3.3设置查询条件3.4查询中的计算

1预定义计算

2自定义计算

3.4.1预定义计算3.4查询中的计算

预定义计算即所谓的“总计”计算,用于对查询中的记录组和全部记录进行总和、平均值、计数、最小值、最大值、标准偏差和方差等数量计算,也可根据查询要求选择相应的分组、第一条记录、最后一条记录、表达式、条件等。

总计查询是通过在“设计视图”窗口的总计行进行设置实现的。例3-7:建立一个查询,统计全校学生人数。⑴.单击“查询”对象,双击“在设计视图中创建查询”选项,添加表。⑵.在查询“设计视图”窗口的上半部分,双击“学号”字段。3.4查询中的计算3.4.1预定义计算(3)在工具栏上单击“总计”按钮,Access在设计网格中显示“总计”行。(4)单击“总计”行,然后再单击右边下三角按钮,选取聚合函数:“计数”,

函数作用Sum()计算某个字段的累加值Avg()计算某个字段的平均值Count()统计某个字段中非空值的个数Max()计算某个字段中的最大值Min()计算某个字段中的最小值StDev()计算某个字段的标准差Var()计算某个字段的方差统计函数

3.4查询中的计算3.4.1预定义计算总计项作用GroupBy定义用来分组的字段First求出在表和查询中的第一条记录的字段值Last求出在表和查询中的最后一条记录的字段值Expression创建表达式中包含统计函数的计算字段Where指定分组满足的条件3.4查询中的计算3.4.1预定义计算

针对某一字段不同值进行的统计,即为分组统计。在“查询设计器”中使用“分组”标签例:从“学生信息”表中查询出下列信息:男女各有多少条记录男女各自最高入学分数男女各自平均入学分数每个学院各有多少人3.4查询中的计算3.4.1预定义计算例3-9:统计全校不同政治面貌的人数。

。建立的查询的过程如下:⑴.单击“查询”对象,双击“在设计视图中创建查询”选项⑵.将表添加到查询设计窗口中,双击“学号”和“政治面貌”两个字段,将它们添加到“设计网格”(3).单击工具栏上的“汇总”按钮,在学号的对应总计行中,单击列表框中的计数项“计数”3.4查询中的计算3.4.1预定义计算例3-10建立一个查询,统计“VB程序设计”课程的平均分、最高分、最低分。3.4查询中的计算3.4.1预定义计算在设计视图中创建查询,添加“学生成绩”表、“课程信息”表两张表。添加“课程名称”字段,添加三次“成绩”字段。在条件行,将课程名称设置为“VB程序设计”。单击工具栏上“总计”按钮,字段“总计”行的设置如图3-31。运行结果如图3-32所示。3.4.2自定义计算(添加计算字段

当需要统计的数据在表中没有相应的字段,或者用于计算的数据值来源于多个字段时,这时应该在“设计网格”中添加一个计算字段,计算字段是指根据一个或多个表中的一个或多个字段并使用表达式建立的新字段。创建计算字段的方法是在查询的设计视图的设计网格“字段”行中直接输入计算字段及其计算表达式。输入规则是:“计算字段名:表达式”,其中计算字段名和表达式之间的分隔符是半角的“:”3.4查询中的计算3.4查询中的计算3.4.2自定义计算(添加计算字段

)例3-11将每个同学的“VB程序设计”课程的成绩增加10%生成新的成绩,要求同时显示出增加10%后的成绩即(新成绩)和原来的成绩。例3-7查询学生年龄大于23的同学情况,需要“学号”、“姓名”、“年龄”字段。其中“年龄”为计算字段,根据系统当前日期和每个人的出生日期计算得到的:年龄:Year(Date())-Year([出生日期])⑴.单击“查询”对象,将添加表。⑵.在查询“设计视图”窗口的上半部分,双击“姓名”字段,将其添加到“设计网格”中,并在“设计网格”中第二列“字段”行输入“年龄:Year(Date())-Year(出生日期)”⑶.运行查询

3.4查询中的计算3.4.2自定义计算(添加计算字段

)3.5创建交叉表查询1认识交叉表查询

2创建交叉表查询

3.5创建交叉表查询3.5.1认识交叉表查询

在分组总计中,分组字段只用了一个,如果要用两个分组字段,分组总计就无法完成,这时可以使用交叉查询来解决这个问题。例如:统计各学院男女同学的人数先按学院分组,再按性别分组3.5创建交叉表查询3.5.1认识交叉表查询

在用两个分组字段进行交叉查询时,一个分组列在查询表的左侧,另一个分组列在查询表的上部,在表的行与列的交叉处显示某个字段的不同新计算值,如总和、平均、计数等,所以,在创建交叉查询时,要指定三类字段。指定放在查询表最左边的分组字段构成行标题。指定放在查询表最上边的分组字段构成列标题。放在行与列交叉位置上的字段用于计算。3.5创建交叉表查询3.5.2创建交叉表查询⑴.在“查询”选项卡中,单击“新建”按钮,打开“新建查询”对话框,选择“交叉表查询向导”选项例3-12:使用“交叉表查询向导”创建查询,按性别统计”学生信息”表不同政治面貌的人数。(2)选择表,单击下一步(3)选择行标题(4)选择列标题(5)选择行,列交叉点计算函数(6)运行例3-13

使用查询设计器创建交叉表查询,按性别统计不同政治面貌的人数。如果通过选择查询来完成,查询设计器和查询结果3.5创建交叉表查询3.5创建交叉表查询

选择查询只按“性别”和“政治面貌”进行垂直分组,这会导致记录的数量更多,结果不清楚。而交叉表查询显示同样的信息,既可以水平方式又可以垂直方式对记录进行分组。步骤:在设计视图中创建查询,添加“学生信息”表。在设计网格中添加“学号”、“政治面貌”、“性别”字段。在工具栏上,单击“查询类型”按钮,选择“交叉表查询”。如果要将字段的值按行显示,可单击“交叉表”行,从中选择“行标题”。必须在这些字段的“总计”行保留默认的“分组”。3.6参数查询

1单参数查询

2多参数查询

参数查询是动态的,它利用对话框提示用户输入参数并检索符合所输入参数的记录或值。根据查询中参数的数据的不同,参数查询可以分为单参数查询和多参数查询两类。3.6参数查询3.6.1单参数查询

例:

创建单参数查询,根据用户输入的学生学号查询相关的成绩信息。运行查询时,显示提示信息“请输入学生学号:”。⑴.根据要求创建查询⑵.在“学号”字段列的“条件”区域输入“[请输入学生学号:]”(3).单击运行按钮.提示录入参数注意:在Access中创建参数查询就是在创建查询时,在查询条件区域中输入用方括号“[]”括起来的提示信息。3.6参数查询3.6.2多参数查询

是通过输入多个条件来检索指定记录例3-14设计一个参数查询,提示输入两个数值,然后检索“入学分数”在这两个数值之间的所有同学的学号、姓名、入学分数。⑴.根据要求创建查询⑵.在“英语”字段列的“条件”区域输入“Between[最低分]And[最高分]”(3).单击运行按钮.提示录入参数3.7操作查询1认识操作查询

2生成表查询3删除查询4更新查询5追加查询3.7操作查询

认识操作查询

操作查询是指只在一个操作中更改许多记录的查询,它可以在检索数据、计算数据和显示数据的同时更新数据,而且还可以生成新的数据表。操作查询包括生成表查询、删除查询、更新查询和追加查询等4种。

3.7操作查询3.7.1生成表查询例3-15将第一学期VB程序设计不及格的学生的相关内容生成新的表。生成表查询就是利用一个或多个表中的全部或部分数据创建新表,如果将查询结果保存在已有的表中,则该表中原有的内容将被删除。⑴.根据要求创建查询(2).单击“查询\生成表查询”命令输入新生成表的名称(3).单击“视图\数据表视图”,预览查询结果。(4).运行查询3.7操作查询3.7.2追加查询

追加查询是从一个或多个表中将一组记录添加到一个或多个表的尾部。使用追加查询可以从外部数据源中导入数据,然后将它们追加到现在的表中,也可以从其他的Access数据库甚至同一数据库的其他表中导入数据。与选择查询和更新查询类似,追加查询的范围也可以利用条件加以限制。3.7操作查询3.7.2追加查询

例3-16

将VB程序设计第二学期不及格的学生内容追加到“VB程序设计不及格名单”表中。⑴.创建相关查询。⑵.单击“查询/追加查询”命令,打开“追加”对话框,在表名称下拉列表框中选择“VB成绩不及格学生情况表”,将查询的结果追加到该表中。注意:若两表有相同字段名,系统自动在“追加到”行上填入相同名,否则需手工填写.3.7操作查询3.7.3更新查询例3-17

将“VB程序设计”课程的成绩小于60分的记录成绩上调5分。更新查询是对一个或多个表中的记录全部更新。如果要对数据表中的某些数据进行有规律地成批的更新替换操作,就可以使用更新查询来实现。,此列表并不显示新值。只有运行查询后,才能更新数据。打开“学生成绩表”可以看出数据已被更改。3.7操作查询3.7.3更新查询

操作步骤:在设计视图中创建查询,添加“学生成绩”表和“课程信息”表。在工具栏上,单击“查询类型”按钮,再单击“更新查询”。添加将要更新的或要指定条件的字段。在设计网格中添加“课程名”和“成绩”字段。在“条件”单元格中指定条件,在要更新字段的“更新到”单元格中,输入用来更改这个字段的表达式或数值。若要查看将要更新的记录列表,单击工具栏上的“视图”按钮此列表并不显示新值。只有运行查询后,才能更新数据。打开“学生成绩表”可以看出数据已被更改。3.7操作查询3.7.4删除查询删除查询可以从单个表中删除记录,也可以从多个相互关联的表中删除记录。

删除查询可以从一个或多个表中删除一组记录,删除查询将删除整个记录,而不只是记录中的所选字段。3.7操作查询3.7.4删除查询例3-18:删除“学生信息”表中的“学号”为“2008000001”的记录。⑴.根据要求创建查询(2).单击“查询/删除查询”命令。(3).单击“视图\数据表视图”,预览查询结果。(4).运行查询3.7操作查询3.7.4删除查询

如果要从多个表中删除相关记录必须满足以下条件:⑴.已经定义了表间的相互关系。⑵.在“关系”对话框中已选中“实施参照完整性”复选项。⑶.在“关系”对话框中已选中“级联删除相关记录”复选项。3.7操作查询3.7.4删除查询

注意:删除查询永久删除指定表中的记录,并且删除的记录不能使用“撤销”命令恢复。因此用户在执行删除查询的操作时要十分慎重,最好把要删除记录的表进行备份,以防由于误操作而引起数据丢失。3.8SQL查询

1使用SQL修改查询中的准则

2创建SQL查询

在Access中,不是所有的查询都可以在系统提供的“查询设计视图”中进行,有的查询只能通过SQL语句实现。SQL语言作为一种通用的数据库操作语言,并不是Access用户必须要掌握的,但实际工作中有时必须用到这种语言才能完成一些复杂的查询工作。3.8SQL查询3.8.1数据查询命令的基本用法

数据查询是数据库的核心操作,使用SQL语言的SELECT的命令可以实现数据查询功能。包括单表查询、多表查询、嵌套查询、合并查询等。

SELECT命令是SQL的核心语句,具有灵活的使用方法和丰富的功能。在Access中,查询的数据来源可以是表,也可以是另一个查询。

1.SELECT命令的语法格式SELECT[ALL|DISTINCT][TOP<数值>][PRECENT]<目标列表>[[AS]<列标题>]FROM<表或查询>[[AS]<别名1>,<表或查询2>[[AS]<别名2>][INNER|LEFT[OUTER]

|RIGHT[OUTER]JOIN]<表或查询3>[[AS]<别名3>][ON<连接条件>]…][WHERE<条件表达式>]AND<筛选条件>[GROUPBY<分组项>[HAVING<分组筛选条件>]][ORDERBY<排序项>[ASC][DESC]]系统默认情况下,输出数据可能有重复行(对应字段值相同)。如果使用Distinct,则对那些重复的数据行仅输出其中一行。(2).FromFrom之后使用表名SelectDistinct姓名From学生信息表SelectDistinct*From学生信息表3.8SQL查询(1)Distinct(3)WhereWhere<条件>用于说明选择数据记录的条件例:输出女团员的信息:3.8SQL查询SELECT姓名,学号,Year(date())-Year(出生日期)as年令FROM学生信息表WHERE性别="女"AND政治面貌="团员"例:输出姓”王”同学的信息SELECT*FROM学生信息表WHEREleft(姓名,1)="王";(4)OrderBy按关键字的值排序输出.ASC升序排列,DESC降序排列。SQL基本命令例:输出成绩表所有记录,并且按成绩降序排序:Select学号,课程号,成绩From学生成绩表

OrderBy成绩DESC(5)GroupBy分组SELECTCount(学号)AS人数,性别FROM学生信息表GROUPBY性别例:输出“学生成绩表”男,女生各自的人数3.8SQL查询SELECT命令的书写规则在“数据定义查询”窗口中一次只能输入一条SQL语句。动词必须书写完整,如“SELECT”,不能写成“SELE”。当SQL语句较长,需分行书写时,用“Enter”键直接换行即可,无需加任何分行符。书写SQL语句要注意格式,应当尽量做到一个子句一行。3.8SQL查询3.8.2SQL视图的操作1.SQL语言的输入与编辑(1)打开数据库窗口,选择“查询”对象,双击“在设计视图中创建查询”选项,关闭“显示表”对话框(即不添加任何的表或查询)。(2)打开“查询”菜单,选择“SQL特定查询”中的“数据定义”命令,如图所示。或者选择工具栏“视图”列表中的“SQL视图”选项。(3)打开“数据定义查询”窗口,输入SQL语句。3.8SQL查询3.8.2SQL视图的操作2.SQL语句的执行语句输入完毕后,选择“查询”菜单中的“运行”命令,或单击工具栏的“运行”按钮,即可执行SQL语句。3.SQL语句的保存根据需要,可以将SQL语句保存为一个查询对象,也可以在关闭“数据定义查询”窗口时对SQL语句进行保存。4.SQL语句的修改对于用SQL语句建立的查询,可以在选定该查询的状态下,使用“设计”按钮,再次打开“数据定义查询”窗口,对其进行修改,并保存

3.8SQL查询3.8.3单表查询单表查询是指查询结果及查询条件中涉及的字段均来自于一个表或查询。常用的单表查询有下面几种情况。1.查询表中的若干列这种查询就是从表中选择需要的目标列,对应于关系代数中的投影运算,其格式为:SELECT<目标列1>[,<目标列2>,…]]FROM<表或查询>查询所有字段当需要查询输出表中所有字段时,在目标列中使用“*”即可,而不必将表所有字段依次罗列出来

例3-20

查询“课程信息”表中所有课程的全部信息。SELECT*FROM课程信息;3.8SQL查询3.8.3单表查询查询指定的字段当需要查询输出一张表中的某些字段时,目标列中依次罗列各输出字段名称,字段的罗科次序即为字段的输出顺序。例3-21

查询“学生信息”表中所有学生的“学号”、“姓名”和“性别”。SELECT学号,姓名,性别FROM学生信息;消除重复记录如果要去掉查询结果中的重复记录,可以在字段名前加上DISTINCT关键字。例3-22从“学生成绩”表中查询所有学生的学号。SELECTDISTINCT学号FROM学生成绩加DISTINCT不加DISTINCT3.8SQL查询3.8.3单表查询查询计算值查询的目标列可以是表中的字段,也可以是一个表达式。例3-23

查询“学生信息”表中所有学生的姓名、性别和年龄。SELECT姓名,性别,YEAR(DATE())-YEAR(出生日期)AS年龄

FROM学生信息

3.8SQL查询3.8.3单表查询2.选择查询选择查询是从表中选出满足条件的记录,对应于关系代数中的选择运算,其格式为:SELECT<目标列>FROM<表名>WHERE<条件>说明:WHERE子句中的条件是一个逻辑表达式,常由多个关系表达式通过逻辑运算符连接而成。例3-24

查询“学生信息”表中所有政治面貌为党员的学号、姓名和所在班级。SELECT学号,姓名,班级编号FROM学生信息WHERE政治面貌="党员";3.8SQL查询3.8.3单表查询2.选择查询例3-25

查询“学生信息”表中班级编号为“090101”,并于1988年出生的学生的学号、姓名。SELECTDISTINCT学号,姓名FROM学生信息WHERE班级编号="090101"ANDYear([出生日期]))=1988

例3-26

查询“学生信息”表中出生于1987年2月2日和1986年9月1日的学生学号、姓名与出生日期。例3-27

查询“学生成绩”表中成绩在80—85分之间的记录例3-28

查询“学生信息”表中所有姓名中包含“国”字的学生学号、姓名与班级编号。3.8SQL查询3.8.3单表查询3.排序查询在SELECT语句中使用ORDERBY子句可以对查询结果按照一个或多个列的升序(ASC)或降序(DESC)排列,默认是升序。该子句的格式为:ORDERBY<排序项>[ASC|DESC]说明:<排序项>可以是字段名,也可以是目标列的序号,如“学生信息”表的“学号”列的序号为1,“姓名”列的序号为2,以此类推。3.8SQL查询3.8.3单表查询3.排序查询例3-29

查询“学生成绩”表分数在80—85分之间的记录,记录按课程编号的升序排列,同门课程按分数的降序排列。SELECT*FROM学生成绩WHERE成绩BETWEEN80AND85ORDERBY课程号,成绩DESCTOP<数值>或TOP<数值>[PERCENT]

例3-30

查询“学生信息”表中成入学分数排在前5名的记录。SELECTTOP5*FROM学生信息ORDERBY入学分数DESC3.8SQL查询3.8.3单表查询4.分组查询在SELECT语句中使用GROUPBY子句可以对查询结果按照某字段的值分组。该子句的格式为:GROUPBY<分组项>[HAVING(分组筛选条件>]例3-32

统计各班的学生人数。分析:解决这个问题需要先将“学生信息”的记录按“班级编号”分组,其次在组内统计记录条数,即在组内使用COUNT(*)。SELECT班级编号,COUNT(*)AS学生总数FROM学生信息GROUPBY班级编号例3-33

统计各职称的教师人数。结果按人数降序排列。分析:解题思路基本同上。对“教师信息”表按“职称”分组,用COUNT(*)统计函数组内记录数;增加排序子句,在排序子句中可以用编号代替字段名称。SELECT职称,COUNT(*)AS总人数FROM教师信息GROUPBY职称ORDERBY23.8SQL查询3.8.3单表查询4.分组查询3.8SQL查询3.8.3单表查询4.分组查询例3-35

查询选课门数在3门以上(含3门)的学生学号及平均成绩。分析:这是一个较为简单的分组查询,目标字段是“学号”和由AVG(分数)求得的“平均成绩”,分组依据是“学号”,对分组后数据进行筛选,条件是COUNT(*)>=3。SELECT学号,AVG(成绩)AS平均成绩FROM学生成绩GROUPBY学号HAVINGCOUNT(*)>=33.8SQL查询3.8.3单表查询4.分组查询例3-36

查询选课门数在3门以上(含3门),每门课程的成绩都不低于75分的学生学号及平均成绩。分析:此题比上题多加了一个条件“每门课程成绩>=75”。这个条件是作用于全部记录的,而不是作用于分组后的结果,所以应当使用WHERE子句。

SELECT学号,AVG(成绩)AS平均成绩

FROM学生成绩

WHERE成绩>=75GROUPBY学号

HAVINGCOUNT(*)>=3

3.8SQL查询3.8.4多表查询1.Access表间联接查询的类型

两张或两张以上的表进行联接查询时,根据建立联接的规则不同,会生成不同的查询结果。Access支持3种表间联接规则:INNERJOIN(内部联接)、LEFTJOIN(左联接,又称左外部联接).RIGHTJOIN(右联接,又称右外部联接)。

(l)INNERJOIN内部联接

从相关联的两个表中选取满足联接条件的记录,按联接条件联接成新记录输出,即查询结果中只包含两个表中都有的记录。格式为:①使用INNERJOIN…ON子句实现,格式为:SELECT<目标列>FROM<表名1>INNERJOIN<表名2>ON<表名l>.<字段名l>=<表名2>.<字段名2>②使用WHERE子句实现,格式为:

SELECT<目标列>FROM<表名1>,<表名2>WHERE<表名1>.<字段名1>=<表名2>.<字段名2>3.8SQL查询3.8.4多表查询例3-37

根据“学生2”和“成绩2”表,查询有成绩的学生的“学号”、“姓名”、所修课程的“课程编号”和“分数”。SELECT学生2.学号,姓名,课程号,成绩FROM学生2INNERJOIN成绩2ON学生2.学号=成绩2.学号;或:SELECT学生2.学号,姓名,课程号,成绩

FROM学生2,成绩2WHERE学生2.学号=成绩2.学号(l)INNERJOIN内部联接3.8SQL查询3.8.4多表查询(2)LEFTJOIN左联接

从左边的表中选取所有记录,按联接条件与右边的表中相关联的记录联接成新记录输出,若右边的表中不存在相关联的记录,则查询输出结果中相应字段为空。即查询结果中包含JOIN子句左边表的所有记录,如果右边表中有相关联的信息,则显示该值,否则返回空值。格式为:SELECT<目标列>FROM<表名1>LEFTJOIN<表名2>ON<表名1>.<字段名1>=<表名2>.<字段名2>3.8SQL查询3.8.4多表查询(2)LEFTJOIN左联接例3-38

根据“学生2”和“成绩2”表,查询所有学生的“学号”、“姓名”、所修课程的“课程编号”和“分数”,没有成绩的学生也要显示出该学生的“学号”、“姓名”信息。

SELECT学生2.学号,姓名,课程号,成绩FROM学生2LEFTJOIN成绩2ON学生2.学号=成绩2.学号;3.8SQL查询3.8.4多表查询(3)RIGHTJOIN右联接从右边的表中选取所有记录,按联接条件与左边的表中相关联的记录联接成新记录输出,若左边的表中不存在相关联的记录,则查询输出结果中相应字段为空。即查询结果中包含JOIN关键字右边表中的所有记录,如果左边表中有相关联的信息,则显示该值,否则返回空值。格式为:SELECT<目标列>FROM<表名1>RIGHTJOIN<表名2>ON<表名l>.<字段名l>=<表名2>.<字段名2>3.8SQL查询3.8.4多表查询(3)RIGHTJOIN右联接例3-39根据“学生2”和“成绩2”表,查询所有课程学习者的“学号”、“姓名”、所修课程的“课程编号”和“分数”,如果某门课程的学习者已不在学生2表中,也要显示出该课程的“课程编号”和“分数”信息。SELECT学生2.学号,姓名,课程号,成绩FROM学生2RIGHTJOIN成绩2ON学生2.学号=成绩2.学号;2.两张表的联接查询3.8SQL查询3.8.4多表查询例3-40

查询所有学生的学号、姓名、所修课程的课程编号和所得分数。分析:本例所需的查询字段分别来自“学生信息”表和“学生成绩”表,两张表的数据通过“学生信息.学号”和“学生成绩.学号”实现对应。SELECT学生信息.学号,姓名,课程号,成绩FROM学生信息,学生成绩WHERE学生信息.学号=学生成绩.学号SELECT学生信息.学号,姓名,课程号,成绩FROM学生信息INNERJOIN学生成绩ON学生信息.学号=学生成绩.学号3.8SQL查询3.8.4多表查询3.两张以上表间的联接查询多表进行联接查询时,也可以使用WHERE子句和JOINON子句两种格式实现。格式1:

SELECT<目标列>FROM<表名1>[<别名1>],<表名2>[<别名2>]<表名3>[<别名3>]WHERE<联接条件1>AND<联接条件2>AND<筛选条件>

格式2:

SELECT<目标列>FROM<表名1>[<别名l>]INNERJOIN|LEFTJOIN|RIGHTJOIN

(<表名2>[<别名2)]INNERJOIN|LEFTJOIN|RKHTJOIN<表名3>ON<表名2>.<字段名2>=<表名3>.<字段名3>)

ON<表名1>.<字段名l>=<表名2>.<字段名2>WHERE<筛选条件>3.8SQL查询3.8.4多表查询3.两张以上表间的联接查询例3-42

查询所有学生的姓名、所修课程的课程名称和分数在85分以上的所得分数。分析:本例所需的查询字段来自“学生信息”、“学生成绩”和“课程信息”3张表,问题的关键是如何同时构造两个关联条件。按上面的语法格式,在WHERE子句中构造“学生信息.学号=学生成绩.学号AND课程信息.课程编号=学生成绩.课程编号”即可。命令为:

SELECT姓名,课程名,成绩FROM学生信息,学生成绩,课程信息

WHERE学生信息.学号=学生成绩.学号AND课程信息.课程号=学生成绩.课程号AND成绩>853.8SQL查询3.8.4多表查询3.两张以上表间的联接查询SELECT姓名,课程名,成绩FROM学生信息INNERJOIN(学生成绩INNERJOIN课程信息ON学生成绩.课程号=课程信息.课程号)ON学生信息.学号=学生成绩.学号WHERE成绩>853.8SQL查询3.8.5嵌套查询

嵌套查询是将一个SELECT语句包含在另一个SELECT语句的WHERE子句中,嵌套在内层的查询称为子查询。子查询(内层查询)的结果作为建立其父查询(外层查询)的条件,因此,子查询的结果必须具有确定的值。例3-43

查询“刘大刚”同学所修课程的“课程编号”及“成绩”。SELECT学号,课程号,成绩FROM学生成绩WHERE学号=(SELECT学号FROM学生信息WHERE姓名="刘大刚")

例3-44

查询课程表中,没有学生选修的课程名称。3.8SQL查询3.8.5嵌套查询SELECT课程名FROM课程信息WHERE课程号NOTIN(SELECTDISTINCT课程号FROM学生成绩)

例:创建子查询,查询并显示“学生成绩”中计算机成绩低于平均分的学生记录。3.8SQL查询3.8.6合并查询

在SOL中,可以将两个SELECT语句的查询结果通过并运算(UNION)合并为一个查询结果。进行合并查询时,要求两个查询结果具有相同的字段数,并且对应字段的数据类型也必须相同。

例3-45

查询1985年以前出生和1989年以后出生的学生信息。

SELECT学号,姓名,性别,出生日期FROM学生信息WHEREYEAR(出生日期)<1985UNIONSELECT学号,姓名,性别,出生日期FROM学生信息WHEREYEAR(出生日期)>1989数据定义语言数据操纵语言数据查询语言数据控制语言SQL语言Access3.9其它SQL命令用于建立(Create),删除(Drop)数据库表以及修改(Alter)数据库表结构。1.数据定义语言3.9其它SQL命令语句格式:CreateTable<表名>(<字段名1><类型描述>[[Not]Null][PrimaryKey]

[,<字段名n><类型描述>[[Not]Null][PrimaryKey][<其它参数>]);语句说明:此语句用于建立数据库表。⑴.建立数据库表1.数据定义语言3.9其它SQL命令类型描述用于描述字段的数据特征,如存储数据的类型和最大宽度,常用书写格式为:<数据类型符号>[(<

温馨提示

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

评论

0/150

提交评论