4.1查询概述查询是Access数据库的7种对象之一,它能够把一个或多个表中的数据抽取出来,供用户查看、更改和分析,还可以作为窗体、报表或数据访问页的记录源。利用查询可以提高处理数据的效率。Access提供了选择查询、交叉表查询、参数查询、操作查询和SQL查询等多种类型的查询,查询的实质就是使用SQL命令进行查询。4.1.1查询的作用Access查询可以对数据库中一个或多个表的数据进行浏览、筛选、排序、检索和统计等操作。我们可以把查询看做一个“表”,只不过是以表或查询作为数据来源的一个临时表,称为动态数据集。也就是说,查询的数据集实际上并不存在,它是在运行查询时动态生成的。查询主要有以下用途:(1)以一个、多个表或查询为数据源,根据用户的选择生成动态的数据集。(2)对数据进行统计、排序、计算和汇总。(3)设置查询参数,形成交互式的查询。(4)使用交叉表查询,进行分组汇总。(5)使用操作查询,对数据表进行追加、更新、删除等操作。(6)查询作为其它查询、窗体、报表或数据访问页的记录源。4.1.2查询的类型查询的类型主要有:选择查询交叉表查询参数查询操作查询SQL查询4.1.3创建查询的方法1.使用查询向导.2.使用查询设计视图3.使用SQL查询语句4.1.4查询的5种视图设计视图SQL视图数据表视图数据透视表视图数据透视图视图。4.2创建选择查询4.2.1使用查询向导创建选择查询【例4.1】创建一个名为“教师基本情况”的查询,显示“教师编号”、“姓名”、“工作时间”、“职称”。【例4.2】创建一个名为“学生成绩统计”的查询,显示学生的“学号”、“总成绩”和“平均成绩”。【分析】此查询为基于单表的查询,但需要在向导中使用“汇总”。4.2.2使用设计视图创建选择查询【例4.3】创建一个名为“教师授课信息”的查询,查询每位教师所授课程的课程名,显示“教师编号”、“姓名”和“课程名”。【分析】“教师信息表”、“课程表”表之间没有直接的联系,需要借助第3张表“授课信息表”将两者联系起来。4.2.3查询条件中的运算符、函数和表达式算术运算符运算符适用的数据类型说明+数字类型、文本型、备注型加法或合并文本串-数字类型、日期/时间型减法*数字类型乘法/数字类型除法关系运算符及含义关系运算符说明=等于不等于小于=小于等于大于=大于等于逻辑运算符逻辑运算符说明Not当Not连接的表达式为真时,整个表达式为假,否则为真And当And连接的表达式都是真时,整个表达式为真,否则为假Or当Or连接的表达式有一个为真时,整个表达式为真,否则为假字符串连接运算符运算符说明举例&连接2个字符串表达式“123”&“123”=“123123”+计算和,也可连接字符串“abc”+“123”=“abc123”123+456=579“123”+123=246【提示】(1)在运算符“&”两侧必须各加一个空格,否则如果变量与字符&紧挨在一起,将作为类型定义符处理。“&”运算符可以将非字符串类型的数据转换为字符串后进行连接。(2)使用“+”运算符时,当两边操作数都为字符串时,进行字符串的组合;当两边均为数值时,进行算术加法运算;当一个为字符串,另一个为数值型时,则先将数字字符转换为数值,然后进行算术加法运算;当一个为数值型,另一个为非数值的字符串,则出错,例:执行“abc”+123时,程序出错。特殊运算符及含义特殊运算符说明In用于指定一个字段值的列表,列表中的任意一个值都可与查询的字段相匹配Between用于指定一个字段值的范围,指定的范围之间用And连接Like用于指定查找文本字段的字符模式。在所定义的字符模式中,用“?”表示该位置可匹配任何一个字符;用“*”表示该位置可匹配零或多个字符;用“#”表示该位置可匹配一个数字;用方括号描述一个范围,用于表示可匹配的字符范围IsNull用于指定一个字段为空IsNotNull用于指定一个字段为非空字段表达式显示姓名Like王*姓名以“王”开头姓名Like*伟姓名以“伟”结尾客户名称Like[A-D]*以字母A~D开头,将字段名包含在一对中括号中所在城市Like*AN*所在城市包含字符串“AN”,将常量字符串包含在一对双引号或单引号中客户名称LikeSUPE?客户名称有5个字母长,且其中前4个字母是“SUPE”而最后的字母为未知的时间电话#2006-1-1#Like1#3将日期包含在一对#中可以找到103、113、123等,通配任何单个数字字符函数说明Abs(数值表达式)返回数值表达式值的绝对值Int(数值表达式)返回数值表达式值的整数部分Sqr(数值表达式)返回数值表达式值的平方根Sgn(数值表达式)返回数值表达式值的符号值数值函数说明函数说明Space(数值表达式)返回由数值表达式的值确定的空格个数组成的空字符串String(数值表达式,字符表达式)返回一个由字符表达式的第1个字符重复组成的指定长度为数值表达式值的字符串如String$(6,a)=aaaaaaString$(5,abcde)=aaaaaLeft(字符表达式,数值表达式)返回一个值,该值是从字符表达式左侧第1个字符开始,截取的若干个字符如Left(abcdefg,4)=abcdLeft(abcdefg,0)=Right(字符表达式,数值表达式)返回一个值,该值是从字符表达式右侧第1个字符开始,截取的若干个字符如Right$(abcdefg,4)=defgRight$(abcdefg,0)=Len(字符表达式)返回字符表达式的字符个数,当字符表达式为Null时,返回Null值,如Len(ABCDEFGHIJK)=11Ltrim(字符表达式)返回去掉字符表达式前导空格的字符串如Ltrim$(abcdefg)=abcdefgRtrim(字符表达式)返回去掉字符表达式尾部空格的字符串如Rtrim$(abcdefg)=abcdefgTrim(字符表达式)返回去掉字符表达式前导和尾部空格的字符串如Trim$(abcdefg)=abcdefgMid(字符表达式,数值表达式1[,数值表达式2])返回一个值,该值是从字符表达式最左端某个字符开始,截取到某个字符为止的若干个字符如Mid(abcdefg,2,3)=bcdMid(abcdefg,2)=bcdefg函数说明Day(date)返回给定日期1~31的值。表示给定日期是一个月中的哪一天Month(date)返回给定日期1~12的值。表示给定日期是一年中的哪个月Year(date)返回给定日期100~9999的值。表示给定日期是哪一年Weekday(date)返回给定日期1~7的值。表示给定日期是一周中的哪一天Hour(date)返回给定小时0~23的值。表示给定时间是一天中的哪个钟点Date()返回当前系统日期函数说明Sum(字符表达式)返回字符表达式中值的总和。字符表达式可以是一个字段名,也可以是一个含字段名的表达式,但所含字段应该是数字数据类型的字段Avg(字符表达式)返回字符表达式中值的平均值。字符表达式可以是一个字段名,也可以是一个含字段名的表达式,但所含字段应该是数字数据类型的字段Count(字符表达式)返回字符表达式中值的个数,即统计记录个数。字符表达式可以是一个字段名,也可以是一个含字段名的表达式,但所含字段应该是数字数据类型的字段Max(字符表达式)返回字符表达式中值中的最大值。字符表达式可以是一个字段名,也可以是一个含字段名的表达式,但所含字段应该是数字数据类型的字段Min(字符表达式)返回字符表达式中值中的最小值。字符表达式可以是一个字段名,也可以是一个含字段名的表达式,但所含字段应该是数字数据类型的字段条件示例操作字段表达式意义姓名Like李*或Left([姓名],1)=李查找姓“李”的记录姓名Like?玉芳查找姓名由三个字组成并且叫“玉芳”的记录姓名Len([姓名])=4查找姓名为4个字或少于4个字的记录姓名IsNotNull查找姓名不是空值的记录课程名称NotLike*计算机*查找课程名称中不包含“计算机”的记录成绩Between60and70或=60and=70查找成绩在60-70分之间的记录学号Mid([学号],3,2)=72查找学号第3个和第4个字符为72的记录工作时间Between#1995-01-01#And#1995-12-31#或year([工作时间])=1995查找1995年参加工作的教师工作时间Date()-30查找30天前参加工作的记录工作时间BetweenDate()AndDate()-20查找20天之内参加工作的记录工作时间Year([工作时间])=1999AndMonth([工作时间])=6查找1999年6月参加工作的记录4.表达式直接输入表达式使用表达式生成器4.2.4创建带条件的查询【例4.4】创建一个名为“1989年参加工作的男教师”的查询,显示“教师编号”、“姓名”、“性别”和“工作时间”。【提示】(1)设计查询时使用的所有标点符号均应为英文状态下的标点符号。(2)工作时间是表中的字段名,设置条件时一定要在其两侧加[],否则Access将其视为字符串。【例4.5】查找“电气”班名字为2个字姓“陈”的学生的信息,显示“学号”、“姓名”、“性别”和“班级”,将查询保存为“陈某学生信息”【分析】根据题意,需要在查询设计视图的的“姓名”和“班级”的“条件”行中分别使用通配符,才能得到满足条件的查询。4.2.5在查询中进行计算【例4.6】创建一个名为“每门课程成绩统计”的查询,统计每门课程的最高分、最低分、总分和平均分。【例4.7】创建一个名为“1989年参加工作的教师人数”的查询,统计1989年参加工作的教师人数。2.自定义计算字段【例4.8】创建一个名为“学生年龄信息”的查询,显示“学生信息表”的“学号”、“姓名”、“性别”、“年龄”。【提示】日期函数Date、Now后一定要加()【例4.9】利用查询在“教师信息表”中添加字段“纳税金额”(纳税金额=(工资-2000)*5%)。显示“教师编号”,“姓名”、“职称”、“工资”和“纳税金额”,将查询保存为“教师纳税金额”。【分析】%不是运算符,Access不能识别%,因此输入百分数时需要转换为对应的小数。4.2.6查询的有序输出【例4.10】创建一个名为“教师信息排序”的查询,显示“教师信息表”中的“姓名”、“职称”、“工资”和“教师编号”,要求按“工资”的升序和“教师编号”的降序显示“教师编号”的第1位为4的教师信息【例4.11】题目要求同例4.10,但显示的字段的顺序为“教师编号”、“姓名”、“职称”、“工资”,还是按“工资”的升序和“教师编号”的降序显示。4.3创建参数查询单参数查询【例4.12】创建一个名为“某月出生的学生成绩”的查询,显示某学生所选课程的成绩。显示“学号”、“姓名”、“出生月份”、“课程号”、“课程名”和“成绩”。【例4.13】查询平均成绩高于输入的平均成绩的学生信息。显示“学号”、“姓名”、“平均成绩”,将查询结果保存为“高于平均成绩参数查询”。这里的“格式”一定要选择“固定”,否则设置的“小数位数”不起作用。【例4.14】创建一个按姓氏查找学生信息的参数查询。显示“学号”、“姓名”、“性别”、“班级”,将查询结果保存为“按姓氏查找学生”。4.3.2多参数查询【例4.15】查询某班某门课的平均成绩。显示“班级”、“课程号”、“课程名”和“平均成绩”,将查询结果保存为“某班某门课平均成绩”。【例4.16】创建按某段出生日期查找学生信息的参数查询。显示“学号”、“姓名”、“出生日期”、“班级”,将查询结果保存为“按出生日期段查找”。4.4创建交叉表查询交叉表查询用于对数据汇总和其它计算,并对这些数据进行分组,一组在数据表的左侧作为行标题,另一组在数据表的上部作为列标题,在行和列交叉处显示某个字段的各种计算值,使数据的显示更加直观、易读。【例4.18】创建一个交叉表查询,统计每个班的男女生人数.【提示】交叉表中的“行标题”可以有一个或多个,“列标题”和“值”只能有一个。【例4