1、第4章 数据查询,4.1 查询简述 4.2 使用向导创建查询 4.3 自己设计查询 4.4 查询实例 4.5 利用查询实现对表数据的修改 4.6 SQL查询 4.7 对查询结果的处理,4.1 查询简述,1. 什么是查询查询是按照一定的条件或要求对数据库中特定数据信息的查找。查询可以对一个数据库中的一个表或多个表中存储的数据信息进行查找、统计、计算、排序等。 查询的结果可以作为窗体、报表、数据访问页或另一个查询的数据源。,4.1 查询简述,Access的查询有三种视图模式:,设计视图,数据表视图,SQL视图,4.1 查询简述,2 .Access的查询类型 Access支持以下5种类型的查询:选择
2、查询参数查询交叉表查询操作查询SQL查询。,4.2 使用向导建立查询,Access提供了多种向导以方便查询的创建。对于初学者来说,选择使用向导的帮助可以快捷地建立所需要的查询。,4.2 使用向导建立查询,1.使用简单查询向导 例:在“教学管理”数据库中新建教师基本情况的查询,4.2 使用向导建立查询,2 使用交叉表查询向导 交叉表查询以水平方式和垂直方式对记录进行分组,并计算和重构数据,可以简化数据分析。交叉表查询计算数据总和、计数、平均值以及其他类型的综合计算。通过交叉表查询可以在一个数据表中以行标题将数据组成群组,按列标题来分别求得所需汇总的数据(如总和或平均值),然后在数据表中以表格的形
3、式显示出来。,4.2 使用向导建立查询,例:在“教学管理”数据库中迅速建立这样一个查询:“学生中各民族的男女生的人数” ,4.2 使用向导建立查询,3使用查找重复项查询向导查找重复项查询向导可以对数据表中某些具有相同的字段值的记录进行检索、分类 例:查找“教师中各种职称的人数” ,4.2 使用向导建立查询,4查找不匹配项查询向导查找不匹配项查询向导可以在一个表中查找与另一个表中没有相关记录的记录。 例:完成“没有选课的学生”的查询,4.3自己设计查询,1 查询的设计视图,“字段” 查询中所使用的字段的名称 “表” 该字段所来自的数据对象(表或查询) “排序” 确定是否按该字段排序以及按何种方式
4、排序 “显示” 确定该字段是否在查询结果集中可见 “条件” 用来指定该字段的查询条件 “或” 用来提供多个查询条件,4.3自己设计查询,查询目标的确定 在查询中显示的字段值可以是原表的字段值,也可以是经过字段表达式计算的结果 ,课程安排:“第 “ & 开课学期 & “ 学期“,4.3自己设计查询,3. 查询条件表达式的设置 设计查询时,如果需要查找满足某一条件的记录,需要在查询设计视图中的“条件”行输入查询的条件表达式。除了直接输入常量外,还可以使用比较运算符、逻辑运算符、特殊运算符、数学运算符和Access的内部函数等来构成表达式。在查询设计区的“条件”行中输入表达式时,如果各个表达式处于同
5、一行,则各个表达式之间应该是逻辑与的关系;如果各个表达式处于不同行,则各个表达式之间应该是逻辑或的关系。,4.3自己设计查询,例如,下列表达式: (1)考试成绩在85到70之间表达式 在 “条件”行对应的“成绩”字段名的单元格中输入: =70 (2)籍贯是“北京”或“南京”的表达式 在 “条件”行对应的“籍贯”字段名的单元格中输入: “北京“ Or “天津“(3)民族是少数民族的表达式 在 “条件”行对应的“民族”字段名下单元格中输入:Not “汉”,4.3自己设计查询,查找少数民族的女学生信息查询和查找少数民族学生或是女学生信息查询,4.3自己设计查询,例如,下列表达式: (1)出生日期在1
6、985年1月1日到1989年12月31日的表达式.Between #1985/1/1# And #1989/12/31# 在条件表达式中输入日期值时,需要在日期值两边加上”#”符号。 (2)职称为教授或副教授的表达式 In (“教授”,“副教授”) 在条件表达式中输入字符串时,需要在字符串两边用双引号引起来。 (3)没有参加考试(即成绩为空值)的件表达式Is Null (4)姓名是姓“张”的表达式 Like “张*” (5)学号第一位是0,第二位是0、1(即00级、01级学生)的表达式Like “001*”,函数1.常用数值函数,2. 常用字符函数,3. 常用日期函数,4. 常用统计函数,5.
7、 常用域聚合函数,4.3自己设计查询,例:查找参加工作在1980年到2000年之前的学历为硕士或博士,工资在3000元以下少数民族的教师的信息,4.3自己设计查询,4.联接类型对查询结果的影响,4.3自己设计查询,例:课程的选修情况的查询,4.4 查询实例,1 选择查询 查询“计算机系学生的选课成绩为及格的”的记录,要求查询结果中包含学生号、学生名、课程号、课程名、成绩。每门课程的成绩按从高到底排列,4.4 查询实例,2参数查询 例:根据输入的“系名”的内容,查找该系教师的情况,4.4 查询实例,3 汇总查询 例:查询每个学生学习课程的成绩的总分、平均分、最高分和最低分。,4.4 查询实例,4
8、.4 查询实例,4交叉表查询例:利用交叉表查询来完成每个学生的第一个学期的选课信息的查询,查询包括学生姓名、所学课程名、成绩和平均分等信息 ,4.5利用查询实现对表数据的更改,查询不仅可以实现对数据的查找,还能很有效地对表中的记录作删除、更新、追加的操作,并且通过查询可以生成新表。,4.5利用查询实现对表数据的更改,1生成表查询生成表查询是将对一个或多个表的查询得到的全部或部分数据来创建新表,这样可以对一些特定的数据进行备份。 例:将计算机系的学生记录生成一个新表,4.5利用查询实现对表数据的更改,2 更新查询更新查询可以对一个或多个表中符合查询条件的数据作批量的更改。 例如:将教师中职称为讲
9、师的工资提高5% ,4.5利用查询实现对表数据的更改,3 追加查询追加查询可以是向一个表的尾部添加记录。追加查询可以将从另一个数据表中读取数据记录添加到当前数据库的表中。 例如:将电子工程系的学生的记录合并到计算机系学生表中。,4.5利用查询实现对表数据的更改,4删除查询利用删除查询可以从一个或多个表中删除符合查询条件的一组记录。 例如:删除“计算机系学生表”中年龄大于等于21岁的记录。,4.6 SQL查询,SQL查询是使用SQL语句创建的一种查询。SQL(Structured Query Language)结构化查询语言是标准的关系型数据库语言,使用SQL语言可以对数据库实施数据定义、数据操
10、作和数据控制及管理。,4.6 SQL查询,.1 SQL视图,4.6 SQL查询,SQL语句功能,(1)数据定义功能 定义、删除、修改关系模式(基本表) 定义、删除视图(视图) 定义、删除索引(索引) (2)数据操纵功能 数据查询 数据插入、删除、修改 (3)数据控制功能 用户访问权限的授予、收回,4.6 SQL查询,SQL语句功能,4.6 SQL查询,3 SQL的数据定义功能,()定义基本表语句格式为: create table 表名 (列名 数据类型 default 缺省值 not null,列名 数据类型 default 缺省值 not null ,primary key(列名 ,列名 )
11、,foreign key (列名 ,列名 ) references 表名 (列名 ,列名 ),check(条件)) ;,例: 定义“学生”表,它包括学号、姓名、出生日期、性别等列(字段),学号为主键,对性别有值的约束条件。 CREATE TABLE 学生( 学号 CHAR(4),姓名 CHAR(8) NOT NULL,出生日期 DATE,性别 CHAR(2),PRIMARY KEY (学号),CHECK (性别=男 OR 性别=女) );,4.6 SQL查询,().修改基本表定义语句格式: ALTER TABLE 表名ADD 子句 增加列或完整性约束条件DROP 子句 删除完整性约束条件MOD
12、IFY 子句 修改列定义例: 在“学生”表中增加一个“系号”列ALTER TABLE 学生 ADD (系号 CHAR(6) ; 例:将“学生“表中的”姓名”列增加到12个字符的宽度ALTER TABLE 学生 MODIFY (姓名 CHAR(12);,4.6 SQL查询,(3)删除基本表语句格式:DROP TABLE 表名; 注意: 删除基本表后,基本表的定义、表中数据、索引都被删除。例:删除“学生”表DROP TABLE 学生;,4.6 SQL查询,(4) 建立索引语句格式: CREATE UNIQUE/DISTINCT INDEX 索引名 ON 表名 (列名 ASC/DESC , 列名AS
13、C/DESC)说明: UNIQUE(DISTINCT):惟一性索引,不允许表中不同的行在索引列上取相同值。若已有相同值存在,则系统给出相关信息,不建此索引。系统并拒绝违背惟一性的插入、更新。ASC/DESC 选项指定索引排序升序或降序,不指定顺序,索引按升序排列。例: 在“学生”表的“学号”列上建立名为“学号INX”的惟一索引。CREATE UNIQUE INDEX 学号INX ON 学生(学号);,4.6 SQL查询,(5) 删除索引 语句格式:DROP INDEX 索引名例: 删除建立在学号的索引DROP INDEX 学号INX,4.6 SQL查询,4 SQL的数据查询功能数据库查询是数据
14、库的核心操作,SQL语言提供了SELECT语句进行数据查询。该语句的功能强,变化形式较多。SELECT查询语句格式如下:SELECT DISTINCT , , (查询的结果的目标列名表) FROM , , (要操作的关系表或查询名) WHERE (查询结果应满足选择或联接条件) GROUP BY , HAVING(对查询结果分组及分组的条件) ORDER BY ASC|DESC (对查询结果排序),4.6 SQL查询,()简单查询 例: 查找成绩在70到80分之间的学生选课情况 SELECT * FROM 选课 WHERE 成绩 BETWEEN 70 AND 80;,4.6 SQL查询,例:查
15、找出所有姓李的学生的情况SELECT *FROM SWHERE SNAME LIKE 李% ;注意:在SQL语言中字符“%”代表任意一串字符,“_” 代表任意一个字符。在Access2003中用“*” 代表任意一串字符, “?” 代表任意一个字符。,4.6 SQL查询,(2)连接查询一个查询同时涉及两个以上的表时,称其为连接查询。例: 查询数学系、计算机系、电子工程系的学生的姓名、系名称 SELECT 姓名,系名称 FROM 学生,系科 WHERE 学生.系号=系科.系号 And 系名称 IN(数学系,计算机系,电子工程系);注意:用“学生.系号=系科.系号”指明两个表的联接条件;“系名称 I
16、N(数学系,计算机系,电子工程)”为选择条件。,4.6 SQL查询,例9 检索计算机系的学生的学号,姓名,年龄SELECT学号, 姓名,(Date()-出生日期)/365 As 年龄FROM 学生,系科 WHERE 学生.系号=系科.系号 And 系名称=计算机系;注意:”(Date()-出生日期)/365” 为年龄的字段表达式。,4.6 SQL查询,(3)嵌套查询一个查询语句的WHERE子句中包含一个由比较符号或谓词引导查询语句时,称查询为嵌套查询,被嵌入的查询称为子查询。 可以引导子查询的谓词有:IN、ANY、ALL、EXISTS。例: 找出年龄小于李芳的学生姓名 SELECT 姓名 FR
17、OM 学生 WHERE 出生日期 (SELECT 出生日期 FROM 学生WHERE 姓名=李芳); 注意:使用比较符引导的子查询,查询的结果必须为惟一值。,4.6 SQL查询,例:求选修了C程序设计课程的所有学生的学号 SELECT 学号 FROM 选课 WHERE 课程号 IN( SELECT 课程号FROM 课程WHERE 课程名称=C程序设计); 注意:本例为嵌套查询-带有子查询的SELEC语句。,4.6 SQL查询,例: 找出学习TC02课程的学生姓名. SELECT 姓名FROM 学生WHERE EXISTS(SELECT *FROM 选课WHERE 学号=学生.学号 AND 课程
18、号=TC02); 注意:本例使用EXISTS(量词)的嵌套查询,4.6 SQL查询,(4)使用聚集函数的查询在查询中使用聚集函数,可以对查询的结果进行统计计算。 常用五个的聚集函数: 平均值: Avg 总和: Sum 最小值: Min 最大值: Max 计数: Count,4.6 SQL查询,例:求学号为011534的学生的总分和平均分SELECT Sum(成绩) AS 总分, Avg(成绩) AS 平均分 FROM 选课 WHERE 学号=011534;注意:本例使用了统计函数Sum(总和)和Avg(平均)例: 求至少选修三门以上课程的学生的学号及选课门数 SELECT 学号, COUNT(
19、*) as 选课门数 FROM 选课 GROUP BY 学号 HAVING COUNT(*)3 ; 注意:分组带有附加条件。每个组的记录条数大于3。,4.6 SQL查询,(5)集合查询集合查询是将多个Select 语句的结果进行集合操作构成一个查询例:查询女学生及选课成绩大于80的学生的学号Select 学号From 学生Where 性别=女UnionSelect 学号From 选课Where 成绩80,4.6 SQL查询,5 SQL的数据更新功能SQL中数据更新包括插入数据、修改数据和删除数据三条语句,(1)插入数据 语句格式1: INSERT INTO ( ,)VALUES (常量 ,常量
20、.);说明:该语句一次完成一个记录的插入。 语句格式2:INSERT INTO ( ,)子查询; 说明:子查询嵌入INSERT语句,查询的结果插入到表中。即一次完成批量记录数据的插入。,4.6 SQL查询,例: 向学生表插入数据INSERT INTO 学生(学号, 姓名, 系号)VALUES(031510, 李新, 15);例:将系号为15的全体学生选修C程序设计课程的信息添入选课表. INSERT INTO 选课 ( 学号, 课程号,成绩 ) SELECT 学号, 课程号, Null FROM 学生,课程 WHERE 系号=15 And 课程名称=C程序设计;,4.6 SQL查询,(2)删除
21、数据 语句格式: DELETE FROM WHERE 说明:无WHERE子句时,表示删除表中的全部数据.WHERE子句中可以带子查询. 例:删除学号为001155的学生记录DELETE FROM 学生 WHERE 学号=001155; 例:删除系号为1的所有学生的选课记录DELETE FROM 选课 WHERE 1= (SELECT 系号 FROM 学生 WHERE 学生.学号=选课.学号);,4.6 SQL查询,(3) 修改数据 语句格式:UPDATE SET = | , = |WHERE ; 说明:修改时,对满足条件表达式的行,将用表达式的值或子查询的结果(唯一值)替换相应列的值。 例:
22、将选课表中的所有选修TC04课程的学生成绩提高5分UPDATE 选课 SET 成绩 = 成绩 + 5WHERE 课程号=TC04; 例: 将系号为1的全体学生的TC02课程成绩置0.UPDATE 选课 SET 成绩 = 0WHERE 课程号=TC02 And 学号 IN(SELECT 学号 FROM 学生WHERE 系号=1 And 学生.学号=选课.学号);,4.6 SQL查询,6 SQL特定查询在Access中将通过SQL语句才能实现查询称为SQL特定查询。SQL特定查询可以分为四类:联合查询、传递查询、数据定义查询和子查询。,4.6 SQL查询,(1) 联合查询 联合查询是将两个查询的结
23、果集合并在一起,对两个查询要求是:查询结果的字段名、类型相同,字段排列的顺序一致。 例:查找选修课程号为TC02或其他选课成绩高于85分的学号,课程号,成绩。,4.6 SQL查询,(2) 数据定义查询 数据定义查询是直接使用SQL语句来创建、删除或更改表的定义,或者为数据库的表建立索引。每个数据定义查询只能由一个数据定义语句组成。CREATE TABLE语句创建表,ALTER TABLE语句在已有的表中添加新的字段。DROP TABLE语句删除表,CREATE INDEX语句为表创建索引,DROP INDEX语句删除索引,,4.6 SQL查询,(3) 传递查询 传递查询将SQL命令直接送到SQ
24、L数据库服务器(如:SQL Server、Oracle等)。这些数据库服务器通常被称作系统的后端,而Access作为前端或客户工具。传递的SQL命令要使用特殊服务器要求的语法,可以参考相关的SQL数据库服务器文档。,4.6 SQL查询,(4)子查询 子查询是指在设计的一个查询中可以在查询的字段行或条件行的单元格中创建一条SQL SELECT语句。SELECT子查询语句放在字段行单元格里的创建一个新的字段,SELECT子查询语句放在条件行单元格的作为限制记录的条件。 例:查找学习课程成绩分数高于平均分的学生的学号和姓名及课程名称。,4.6 SQL查询,4.7对查询结果的处理,1打印查询结果创建了
25、查询后,可以将查询的结果(动态集)以数据表的形式打印出来。操作步骤如下: (1)选择要打印结果的查询,单击数据库窗口上的“打开”按钮,使查询显示为查询的数据表视图状态。 (2)单击“文件”菜单上的“打印”命令,在“打印”对话框中指定所要的打印选项。 (3)确定打印机已经连接好并已经开机后,单击“打印”对话框中的“确定”按钮即可打印出结果。,4.7对查询结果的处理,2 将对表的筛选操作存为查询前面已经介绍了有关表的筛选的内容,表的筛选结果也可以存为查询。操作步骤如下: (1)打开一个表并作好一个筛选设置。 (2)单击工具栏上的“另存为查询”按钮。 (3)在弹出的对话框中输入查询的名字,单击“确定
26、”,筛选就被存为一个查询了。,本章小结,在本章中内容分为以下内容: 第一部分介绍了如何使用向导创建选择查询、交叉表查询、查找重复记录和不匹配记录的查询,并介绍了自己根据实际要求来设计查询,通过实例来设计选择查询、参数查询、汇总查询、交叉表查询。这些查询能够满足一般对数据的查找、统计的要求。 第二部分介绍了维护数据库的基本方法,它包括生成表查询、追加查询、更新查询和删除查询。掌握这些内容的能有效地对数据库数据进行操作和维护,提高工作效率。 第三部分针对一些复杂的查询任务介绍了SQL查询语句和带有查询的数据操作(增、删、改)语句及SQL特殊查询 。 掌握Access的查询操作可以完成用户对数据的需求的操作。,