1、第3章 数据查询与SQL命令,查询对象概述 通过向导或设计视图创建查询 使用SQL命令查询 操作查询,1,2,3.1 查询对象概述,查询是以表或查询作为数据源生成查询对象,每次使用查询时,都从指定数据源抽取满足条件的记录,并以数据表的形式显示查询结果。 查询对象的实质是SQL命令,本身不包含数据 生成查询对象的途径:查询向导、查询设计视图和SQL视图,查询是具有条件检索和计算功能的数据库对象。,3.1 查询对象概述,根据某种规则查找部分数据 同时显示分布在若干个表或查询中的数据 对表中的数据进行计算、分类、汇总 转置表并进行分类统计 查询结果转换成表 成批更新、删除表中的数据,或将筛选出的数据
2、追加到另一个表,查询能实现的功能需求:,3.1 查询类型,查询类型: 选择查询、参数查询、交叉表查询、操作查询及SQL查询。,3.1 查询类型,用于浏览、检索、统计数据库中的数据,功能:,选择查询,从一个或多个表中检索数据。 在一定条件下,更改相关表中的记录。 对记录进行分组,并进行总计、计数、求平均值以及其他类型的计算。,3.1 查询类型,参数查询通过运行查询时输入参数、创建动态查询结果,以便更多、更方便地查找有用的信息。,参数查询,3.1 查询类型,交叉表查询将表中字段分组,一组列在数据表左侧,一组列在数据表上部,行与列交叉处显示统计值(合计值、计算值、平均值)。,交叉表查询,3.1 查询
3、类型,操作查询在操作中更改多个记录的查询,主要用于数据库中数据的更新、删除及生成新表,可分为四类:删除查询更新查询追加查询生成表查询,操作查询,3.1 查询类型,SQL查询是通过SQL语句创建的查询,可以创建选择查询、参数查询、数据定义查询及操作查询。,SQL查询,用简单查询向导生成查询通过设计视图编辑或创建查询条件查询 查询的有序输出 使用通配符查询 使用计算字段 参数查询交叉表查询,3.2 通过向导或设计视图创建查询,3.2.1 用简单查询向导生成查询,在数据库窗口,单击查询对象,3.2.1 用简单查询向导生成查询,【例3-1】基于“导师”表生成“导师情况表”查询,要求能观察到姓名、职称和
4、所属系编号。,3.2.1 用简单查询向导生成查询,(1)在研究生管理数据库窗口,单击“查询”对象,在右侧窗口,单击使用向导创建查询;,3.2.1 用简单查询向导生成查询,(2)选择数据源,在“表/查询”下拉式列表框中选择“导师”表,在“可用字段”列表框中选中所要查询的字段,单击中间的 按钮,使其选中并出现在“选定字段”列表框中。,3.2.1 用简单查询向导生成查询,(3)在最后一个向导对话框,提示用户命名查询名称,默认为“导师 查询”(与数据源的名称相关),3.2.1 用简单查询向导生成查询,说明:(1) 作为查询对象,“导师情况表”只是一条SQL命令,本身并不包含数据。数据来源于“导师”表。
5、(2) 如果打开查询对象时对数据进行更新、添加,则数据的变化实际发生在数据源(“导师”表)中。(3) 数据源如果被删除,则查询无法打,并显示出错信息。,3.2.1 用简单查询向导生成查询,【例3-2】 基于“导师”和“研究生”两个表生成“导师-研究生”查询,显示每位导师的编号、姓名、职称及其所带研究生的学号、姓名和入学分数。,前提:“导师”表和“研究生”表应建立一对多关系,本章中的例题以“导师”表、“研究生”表和“系”表作为查询的数据源,为不失一般性,删除研究生马力、李卫星和赵小刚的导师编号,使他们暂时无导师,同时让“导师”表中的李小严不带研究生 。,3.2.1 用简单查询向导生成查询,在“表
6、/查询”下拉列表框中,依次选择“导师”表 和“研究生”表,并在 “可用字段”列表框中,选中需查询字段,将其送入“选定的字段”列表框中。,(1)在简单查询向导第一个对话框,选择数据源及字段:,3.2.1 用简单查询向导生成查询,(2)确定采用明细查询还是汇总查询,3.2.1 用简单查询向导生成查询,查询结果:,3.2.1 用简单查询向导生成查询,说明: 查询对象的字段名一般沿用数据表中的字段名,如果出现相同的字段名,系统自动在字段名前加上表的名字以示区别 “研究生”表中共有18个学生,但查询结果却只显示了15条记录,为什么? 如果两个表未建立关系,查询向导将关闭,同时要求用户先建立两个表的关系。
7、,在数据库窗口,在左侧窗口双击“在设计视图中创建查询” 选中某个待编辑修改的查询对象,单击工具栏的设计视图按钮 ,打开设计视图对话框。 在数据库窗口工具栏中单击新建按钮,在“新建查询对话框”中,选中设计视图,3.2.2 通过设计视图编辑或创建查询,3.2.2 通过设计视图编辑或创建查询,查询设计视图,右键快捷菜单:添加用于查询的数据源,查询设计工具栏,3.2.2 通过设计视图编辑或创建查询,查询设计视图中的工具栏,3.2.2 通过设计视图编辑或创建查询,打开已有查询的设计视图:单击 “设计”按钮,3.2.2 通过设计视图编辑或创建查询,在设计视图中创建查询,【例3-3】为例3-2建立的查询添加
8、“博导”列(位于“职称”的右侧),用以说明该导师是否为博导,另存为“导师-研究生2”,3.2.2 通过设计视图编辑或创建查询,3.2.2 通过设计视图编辑或创建查询,查询执行结果:,3.2.2 通过设计视图编辑或创建查询,【例3-4】在查询设计视图中新建一个查询,要求能够显示各个系的系名、系中导师的姓名和导师所带研究生的姓名。,3.2.2 通过设计视图编辑或创建查询,思考:如果“系”与“导师”表之间、“导师”与“研究生”表之间没有建立关系,将得到什么结果?,查询结果,3.2.2 通过设计视图编辑或创建查询,【例3-5】按系名显示各研究生的姓名。,“导师”表是“系”表与“研究生”表之间的联系“桥
9、梁” ,应建立三个表的关联关系。,思考:如果“系”与“导师”表之间、“导师”与“研究生”表之间没有建立关系,将得到什么结果?,3.2.3 条件查询,条件的作用是对所选择的记录作进一步的限定,在查询设计窗口下半部的设计网格选择字段(或双击字段) 设计查询显示、输入查询条件,3.2.3 条件查询,【例3-6】 显示所有女研究生信息,3.2.3 条件查询,说明: “条件”行中表达式的等号“=”可以省略。条件本身是一个关系表达式,关系表达式中的字符值既可放置在一个单引号中,也可以放在一对双引号中。日期值放在一对#中; 设计视图中,“条件”文本框中放置的是条件表达式。如果有几个条件左右并列,表明是And
10、关系(并且),即几个条件同时成立,整个条件成立;如果在“或”文本框中出现上下并列的几个条件,表示Or关系(或者),只要这些条件中的一个成立,条件就成立。,3.2.3 条件查询,【例3-7】 列出入学分数在340360之间的研究生姓名、性别和入学分数,3.2.3 条件查询,【例3-8】列出入学分数在340360之间的男研究生姓名、性别和入学分数,3.2.3 条件查询,【例3-9】 选出研究方向为考古学或会计学的研究生,考古学 Or 会计学,3.2.3 条件查询,【例3-10】显示马腾跃所带女研究生和入学分数超过320分的男研究生,3.2.3 条件查询,【例3-11】 找出所有没有导师编号的研究生
11、姓名,返 回,补充:设置查询条件,条件中的运算符,注意没有%运算符,补充:设置查询条件,返 回,条件中的运算符,补充:设置查询条件,返 回,条件中的运算符,【例1】创建一个选择查询,查找“客房类型”字段值不为“普通间”的记录,并依次显示“客房ID”、“客户姓名”、“价格”和“入住时间”等四个字段的内容,补充:设置查询条件,返 回,条件中的运算符,补充:设置查询条件,返 回,条件中的运算符,补充:设置查询条件,条件中的函数,Access提供了大量的标准函数,补充:设置查询条件,条件中的函数,【例2】创建一个选择查询,查找2008年的借书情况,并依次显示“单位”、“姓名”、“书名”等三个字段的内容
12、。,补充:设置查询条件,条件中逻辑值的表示,是否数据类型(也称布尔数据类型)其值是逻辑值,即真值或假值。 真值表示为true或yes 假值表示为false或no,查询是博导的所有导师,yes,3.2.4 查询的有序输出,【例3-12】 建立一个查询,输出“研究生”表的姓名、性别、导师编号和分数,按性别的升序和导师编号的降序显示记录。,3.2.4 查询的有序输出,【例3-13】 按性别的升序和导师编号的降序显示记录,输出字段顺序为:姓名、导师编号、性别和入学分数.,3.2.5 使用通配符查询,通配符用以实现仅知道部分内容,即所知信息残缺的情况下,完成对文本及数值等类型字段的查询。,通配符可以用作
13、其他字符的占位符,比如查询姓马的人员可用通配符表示条件为:马*,3.2.5 使用通配符查询,3.2.5 使用通配符查询,【例3-14】研究方向的第3个字为“医”的姓“马”的研究生的全部信息。,3.2.5 使用通配符查询,【例3-15】找出年龄为50余岁的导师,所带研究生中没有姓马和赵的学生。,3.2.6 使用计算字段,在查询结果的某列中使用计算表达式,称使用计算字段; 计算字段名可使用别名,方法是在计算字段表达式前输入:字段别名: (即用 : 分隔别名和计算字段表达式) 计算字段的值由表达式计算而得,不保存在表中,3.2.6 使用计算字段,【例3-16】 输出导师编号、姓名、出生年份和性别,由
14、年龄推算出生年月 ,考虑通用性应改成:Year(Now()-年龄,3.2.6 使用计算字段,【例题】 创建一个选择查询,依次显示“学生”、“专业”和“爱好”三个字段的内容,其中“学生”字段内容为“学号”字段与“姓名”字段内容的组合(“学号”+“姓名”),补充: 参数查询,参数查询是选择查询的特殊形式。查询时,由用户定义参数值。 参数也是条件,不同的是条件是在创建查询时输入的,而参数是在运行即打开查询时输入的。,补充: 参数查询,运行参数查询时,系统显示对话框,要求输入数据,然后将输入的数据插入到设计视图指定条件的网格。使用这种查询,可以在不打开查询设计的情况下,重复使用相同的查询结构,实现灵活
15、的查询。 例如建立以“姓名”为参数,补充: 参数查询,参数查询设计步骤: 打开“在设计视图中创建查询”,添加查询数据源 在查询设计视图窗口,双击字段添加到网格设计中,确定参数查询字段,在条件处输入提示信息,并加上中括号 ,补充: 参数查询,【例1】 创建一个参数查询,由用户输入“系编号”,显示导师姓名和职称。 (1)双击“在设计视图中创建查询”,在“显示表”对话框中选择“导师”表,单击“添加”、“关闭”按钮。,补充: 参数查询,(2)在“选择查询”窗口,依次将“系编号”、“姓名”和“职称”字段拖到 “字段”一栏中(或双击)。,补充: 参数查询,(3)在需设置参数的字段所对应的条件单元格中输入提
16、示信息,并用一对 引起来,如在设计视图 的“系编号”字段的“条件”处输入请输入系编号 。,补充: 参数查询,(4) 单击 ,运行查询,弹出输入参数值对话框 ;,补充: 参数查询,【例2】创建一个参数查询,按照导师“姓名”字段查找某导师所带研究生情况,并按“入学日期”字段降序显示导师姓名、研究生姓名、入学日期三个字段的内容。 (1)双击“在设计视图中创建查询”,在“显示表”对话框中选择“导师”表,“研究生”表,单击“添加”、“关闭”按钮。,补充: 参数查询,(2)在“选择查询”窗口,依次将“导师姓名”、“研究生姓名”和“入学日期”字段拖到下表中的“字段”一栏中。,补充: 参数查询,(3)在导师表
17、的姓名列的“条件”处输入提示信息请输入导师姓名,在入学日期列的“排序”处选降序,补充: 参数查询,(4) 单击 ,运行查询,弹出输入参数值对话框 ;,补充:在查询中进行统计,在Access中,可以使用总计功能对字段中的数据进行分类统计计算。例如按照某种分类统计某字段的平均值、总和、计数等。 单击工具栏中的 (总计)按钮,在查询视图的条件设定中出现“总计”行。,补充:在查询中进行统计,在字段的总计单元格中打开下拉列表,从下拉列表中可选择统计公式。常用的统计公式有:总计,平均值、最大值、最小值、计数、分组统计等。,补充:在查询中进行统计,分组:表示该字段是分组字段,对应Group By ; 总计:
18、计算组中该字段所有值的和; 平均值:计算组中该字段的算术平均值; 最小值:返回组中字段的最小值; 最大值:返回组中字段的最大值; 计数:返回该组中记录(行)的合计;,补充:在查询中进行统计,【例1】在研究生表中分别统计出男女生入学平均分,应添加三个表,并建立关系!,补充:在查询中进行统计,【例2】分别统计出不同系别研究生总人数,3.2.7 交叉表查询,交叉表类似Excel中的数据透视表,可显示表中某个字段的汇总值,包括总和、计数和平均等。 1. 用向导生成交叉表,3.2.7 交叉表查询,选择交叉表的行标题,3.2.7 交叉表查询,选择交叉表的列标题,3.2.7 交叉表查询,选择参与计算的字段,
19、3.2.7 交叉表查询,命名交叉表,3.2.7 交叉表查询,【例3-17】 生成一个交叉表,显示不同性别不同研究方向各导师所带研究生的入学平均分。,1,2,3,4,5,3.2.7 交叉表查询,【例3-17】 生成一个交叉表,显示不同性别不同研究方向各导师所带研究生的入学平均分。,缺点:(1) 标题“总计 入学分数”含义不清(2) 平均数的小数点位数太多,3.2.7 交叉表查询,2. 在设计视图中完善交叉表,3.2.7 交叉表查询,3. 引用两个表的字段生成交叉表 【例3-18】 显示不同系不同性别的导师人数 方法一:交叉表向导 先建立一个查询,包含两个表中的所需字段 根据所建查询用向导创建交叉
20、表,3.2.7 交叉表查询,【例3-18】 显示不同系不同性别的导师人数 方法二:交叉表设计视图,3.3 使用SQL命令查询,SQL语言概述基于单一记录源的查询基于多个记录源的查询合计、汇总与计算嵌套查询,3.3.1 SQL语言概述,SQL( Structured Query Language)意为结构化查询语言,可用于定义、查询、更新、管理关系型数据库系统。 SQL是一种非过程语言,易学易用,语句由近似自然语言的英语单词组成,例如:Select 学号,姓名,入学分数,研究方向From 研究生 Where 性别=男,功能:显示“研究生”表中所有男生的学号、姓名、入学分数和研究方向,3.3.1
21、SQL语言概述,SQL的查询语句格式: SELECT 字段列表INTO 新表FROM 记录源WHERE GROUP BY HAVING ORDER BY 字段列表ASC|DESC,说明: 中的内容为可选项,返 回,使用SQL命令查询,查询的实质是SQL命令,3.3.2 基于单一记录源的查询,单一记录源:被查询的对象是一个表或查询 进入SQL视图:,先进入空白查询设计视图(不选择数据源),3.3.2 基于单一记录源的查询,1. 选取记录源的全部字段或部分字段,* 表示记录源的全部字段,【例3-19】 输出“导师”表的全部字段,并将查询保存为“导师SQL”,3.3.2 基于单一记录源的查询,【例3
22、-20】以 “导师SQL”查询为记录源,显示导师编号、姓名和职称字段。,SELECT 导师编号,姓名,职称FROM 导师SQL,说明: 字段名之间的逗号“,”必须是英文字符 如果重命名查询“导师SQL”,则查询中引用的记录源自动更新。 作为记录源的“导师SQL”查询不能删除 当真正的记录源“导师”表中的数据更新时,查询的执行结果也自动更新。,3.3.2 基于单一记录源的查询,2. 用DISTINCT消除重复记录 【例3-21】显示导师表中所有“职称”名称。,SELECT DISTINCT 职称 FROM 导师,SELECT 职称 FROM 导师,3.3.2 基于单一记录源的查询,3. 用TOP
23、显示记录源前面的若干条记录语法格式:TOP n(n为指定记录数),SELECT TOP 4 * FROM 导师,【例3-22】 显示“导师”表中的前4条记录,3.3.2 基于单一记录源的查询,4. 用WHERE子句对记录进行选择 语法格式:WHERE 说明:其中关系运算符为比较或逻辑运算符,3.3.2 基于单一记录源的查询,SELECT 姓名,性别,年龄FROM 导师WHERE 年龄=60,【例3-23】找年龄不低于60岁的导师,显示其姓名、性别和年龄字段。,3.3.2 基于单一记录源的查询,【例3-24】 找出所有年龄不低于60岁的女导师,SELECT 姓名,性别,年龄FROM 导师WHER
24、E 导师.年龄 =60 AND 性别=女,3.3.2 基于单一记录源的查询,SELECT 姓名,性别,入学分数,研究方向FROM 研究生WHERE 入学分数350 AND 性别=女 OR 研究方向=考古学,【例3-25】 入学分数在350分以上的女研究生,及所有“考古学”研究方向的研究生,3.3.2 基于单一记录源的查询,5. 用特殊运算符过滤记录,考虑下列筛选条件的差异 ? 入学分数 BETWEEN 320 AND 360 入学分数 IN(320,360),3.3.2 基于单一记录源的查询,【例3-27】找出所有入学分数在320360 之间的 “考古学”、“会计学”方向的研究生姓名、性别、入
25、学分数、研究方向。,SELECT 姓名, 性别, 入学分数, 研究方向FROM 研究生WHERE 研究方向 IN(考古学,会计学) AND 入学分数 BETWEEN 320 AND 360,3.3.2 基于单一记录源的查询,【例3-28】找出所有没有导师的研究生信息,SELECT *FROM 研究生WHERE 导师编号 IS NULL,3.3.2 基于单一记录源的查询,【例3-29】姓马或姓名中含有“国”字的研究生,SELECT *FROM 研究生WHERE 姓名 LIKE 马* OR 姓名 LIKE *国*,3.3.2 基于单一记录源的查询,【例3-30】学号尾数不在0-4范围中的研究生,条
26、件也可为:WHERE 学号 LIKE *5-9,SELECT *FROM 研究生WHERE 学号 LIKE *!0-4,3.3.2 基于单一记录源的查询,6. 用ORDER BY子句将记录排序输出 格式:ORDER BY 排序字段 ASC/DESC 【例3-31】按性别的升序和入学分数的降序,输出入学分数在340分以上研究生全部信息。,SELECT *FROM 研究生WHERE 入学分数340ORDER BY 性别, 入学分数 DESC,返 回,3.3.3 基于多个记录源的查询,1. 用WHERE实现表间关系表间按WHERE子句限定的条件进行关联,【例3-32】输出带研究生的导师姓名及所带研究
27、生姓名,3.3.3 基于多个记录源的查询,2. 用内连接INNER JOIN实现表与表的连接,格式:FROM INNER JOIN ON 【例3-33】用INNER JOIN实现例3-32 题的查询,SELECT 导师.姓名,研究生.姓名FROM 导师 INNER JOIN 研究生 ON 导师.导师编号=研究生.导师编号,3.3.3 基于多个记录源的查询,【例3-32】与例3-33的区别(是否允许添加新记录),WHERE,INNER JOIN,3.3.3 基于多个记录源的查询,在较长的查询命令中可用别名代替表名。,SELECT t.姓名,t.性别,s.姓名,s.性别,入学分数FROM 导师 A
28、S t INNER JOIN 研究生 AS s ON t.导师编号=s.导师编号 WHERE t.姓名=马腾跃,t 为“导师”表的别名, s 为“研究生”表的别名,【例3-34】输出导师马腾跃的姓名、性别及其所带研究生的姓名、性别和入学分数。,3.3.3 基于多个记录源的查询,【例3-35】 显示所有系的系名、系中每位导师的姓名和每位导师所带研究生的姓名。,Select 系名,导师.姓名,研究生.姓名 FROM(系 inner join 导师 on 系.系编号=导师.系编号)inner join 研究生 on 导师.导师编号=研究生.导师编号,注意:查询涉及到导师、研究生以及系3个表,首先用I
29、NNER JOIN连接两个表,之后再连接第三个表。,3.3.3 基于多个记录源的查询,3. 用左外连接实现表与表的连接FROM LEFT JOIN ON 将左侧表()中连接字段的值全部显示,3.3.3 基于多个记录源的查询,【例3-36】显示每位导师姓名及所带研究生姓名,SELECT 导师.姓名, 研究生.姓名FROM 导师 LEFT JOIN 研究生 ON 导师.导师编号 = 研究生.导师编号,3.3.3 基于多个记录源的查询,4. 用右外连接实现表与表的连接FROM RIGHT JOIN ON 功能:将右侧表()中连接字段的值全部显示,3.3.3 基于多个记录源的查询,【例3-37】显示全
30、部研究生姓名及带教导师的姓名,SELECT 导师.姓名, 研究生.姓名FROM 导师 RIGHT JOIN 研究生 ON 导师.导师编号=研究生.导师编号,3.3.4 合计、汇总与计算,合计函数COUNT函数:格式:Count()功能:统计符合条件的记录个数。,【例3-38】统计入学分数等于或超过340分男研究生,SELECT COUNT(姓名) FROM 研究生WHERE 入学分数=340 AND 性别=男,AS 合格人数,3.3.4 合计、汇总与计算,SUM求和函数格式:Sum()功能:返回字段中值的总和,【例3-39】求导师陈平林所带研究生入学分数总和,SELECT SUM(入学分数)
31、AS 入学分数总计FROM 导师,研究生WHERE 导师.导师编号=研究生.导师编号 AND 导师.姓名=陈平林,3.3.4 合计、汇总与计算,MAX和MIN函数:格式: Max() Min()功能:分别用于在指定的记录范围内找出具有最大值和最小值的字段。,【例3-40】找出男生中的最高分和最低分,SELECT MAX(入学分数) AS 最高分,MIN(入学分数) AS 最低分FROM 研究生WHERE 性别=男,3.3.4 合计、汇总与计算,AVG函数:求平均 格式:Avg()功能:求数值类型字段的平均值。,【例3-41】输出计算机系所属研究生平均入学分数,注意:“系”表与“研究生”表没有直
32、接联系,必须以“导师”表为桥梁进行组合查询,SELECT AVG(入学分数) AS 入学平均分FROM 系, 导师, 研究生WHERE 系.系编号=导师.系编号 AND 导师.导师 编号=研究生.导师编号 AND 系名=计算机系,3.3.4 合计、汇总与计算,分组查询 将输出记录按照字段值相等分成若干组,配合合计函数进行分组统计汇总。 格式:GROUP BY 分组表达式1,分组表达式2,. 【例3-42】按性别统计导师的平均年龄,SELECT 性别, AVG(年龄) AS 平均年龄FROM 导师GROUP BY 性别,3.3.4 合计、汇总与计算,使用GROUP BY 子句进行分组时,显示的字
33、段只能是参与分组的字段以及基于分组字段的合计函数计算结果。,3.3.4 合计、汇总与计算,ORDEY BY子句总是出现在SELECT语句的最后 【例3-43】 统计各位导师所带的不同性别研究生的入学最高分,最高分值按导师编号降序输出,SELECT 导师编号, 性别, MAX(入学分数) AS 最高分FROM 研究生GROUP BY 导师编号, 性别ORDER BY 导师编号, MAX(入学分数) DESC,3.3.4 合计、汇总与计算,HAVING函数该函数与GROUP BY子句联合使用,对分组后的结果进行限制。 【例3-44】 计算每一位导师所带研究生的平均入学分数、人数和他们的导师编号,没
34、有导师的三位自成一组,对超过2人的组输出统计结果。,SELECT ROUND(AVG(入学分数),1), COUNT(姓名) AS 本组人数, 导师编号FROM 研究生GROUP BY 导师编号HAVING COUNT(姓名)2,3.3.4 合计、汇总与计算,计算列实质是一个表达式,使用方式同字段。 【例3-45】显示入校时间已达两年的研究生的全部信息及在校年数,SELECT 研究生.*, YEAR(NOW()-YEAR(入学日期) AS 在校年数FROM 研究生WHERE YEAR(NOW()-YEAR(入学日期) = 2,表达式(计算列),给表达式赋列名,入校时间已达两年,3.3.5 嵌套
35、查询,嵌套:将第一次查询的结果作为第二次查询的条件 【例3-46】显示所有入学分数高于平均分的研究生数据 错误:正确:,SELECT 姓名,入学分数FROM 研究生WHERE 入学分数AVG(入学分数),3.3.5 嵌套查询,修改要求:同时输出平均分,第1行可否为 : SELECT 姓名,入学分数,AVG(入学分数),3.3.5 嵌套查询,【例3-47】找出年龄最高导师信息及其所在系的系名,SELECT 系名, 导师.*FROM 系, 导师WHERE 系.系编号=导师.系编号 AND 年龄=(SELECT MAX(年龄) FROM 导师),嵌套查询:先找出所有导师中的最高年龄,3.3.5 嵌套
36、查询,【例3-48】找出社科系最年轻导师的全部信息,SELECT 系名, 导师.*FROM 系, 导师WHERE 系.系名=社科系 AND 系.系编号=导师.系编号 AND 年龄=(SELECT MIN(年龄) FROM 系,导师 WHERE 系.系名=社科系 AND 系.系编号 =导师.系编号),嵌套查询:找出社科系导师的最小年龄,返 回,3.4 操作查询,操作查询功能对数据源中的数据进行追加、删除、更新等操作,并可在选择查询基础上创建新表。,操作查询的种类 生成表查询:根据查询结果生成新表。 追加查询:将符合条件的记录添加到表尾。 更新查询:更新表中的符合条件的记录。 删除查询:从表中删除
37、符合条件的记录。,3.4 操作查询,生成表查询 追加查询 更新查询 删除查询,3.4.1 生成表查询,生成表查询利用一个或多个表中全部或部分数据创建查询,并将查询结果以数据表的形式存储,保存在数据库中。 生成表查询SQL命令: SELECT 字段列表INTO 新表FROM 记录源WHERE GROUP BY HAVING ORDER BY 字段列表ASC|DESC,3.4.1 生成表查询,【例3-49】将所有女研究生的全部信息按导师编号降序、入学分数升序生成Female表。,SELECT 研究生.* INTO FemaleFROM 研究生WHERE 性别=女ORDER BY 导师编号 DESC
38、,入学分数,3.4.1 生成表查询,利用设计视图创建生成表查询,创建选择查询,3.4.1 生成表查询,利用设计视图创建生成表查询,选择生成表查询类型,执行“查询”/“生成表查询”菜单命令 ,或者单击查询设计工具条“查询类型”按钮选择生成表查询。,3.4.1 生成表查询,利用设计视图创建生成表查询,命名新表名,3.4.1 生成表查询,利用设计视图创建生成表查询,运行生成表查询,3.4.1 生成表查询,利用设计视图创建生成表查询,保存查询,3.4.1 生成表查询,利用设计视图创建【例3-49】生成表查询: 将所有女研究生的全部信息按导师编号降序、入学分数升序生成Female表。,3.4.2 追加查
39、询,追加查询用于在现有数据表中添加记录,或将其他表中符合条件的记录添加到该数据表中。 追加查询SQL命令:INSERT INTO 表名 (字段名列表)VALUES(值列表) 子查询,说明: 表名为“追加到”的表; 选项(字段名列表) 表示追加到当前表的目标字段; 选项VALUES(值列表)表示将具有确定属性值的记录追加到当前表中;如:INSERT INTO 系 VALUES(“D04“,“物理系“,“12345678“),3.4.2 追加查询,追加查询SQL命令:INSERT INTO 表名 (字段名列表)VALUES(值列表) 子查询 说明: 选项子查询通常为SELECT命令的选择查询, 表
40、示待追加的记录,待追加的字段与“追加到”字段的名称可以不一致,但类型应相同或兼容。 追加操作不应破坏数据的完整性约束。 使用追加查询追加的记录不能用“撤销”命令恢复。,3.4.2 追加查询,【例3-50】将研究生表中全部男研究生信息追加到表female中,要求不包含记录中的“性别”信息,INSERT INTO Female (学号,姓名,入学日期,分数,研究方向,导师编号)SELECT 学号,姓名,入学日期,入学分数,研究方向,导师编号FROM 研究生WHERE 性别=男,3.4.2 追加查询,【例题】已知Sample2.mdb数据库中已经设计了“图书”表和“暂存”表。创建一个SQL查询,使用
41、Insert语句向“暂存”表添加一条记录(“操作系统”,“张家林”,“高等教育出版社”,26.00),INSERT INTO 暂存VALUES( “操作系统”,”张家林”,”高等教育出版社”, 26.00),3.4.2 追加查询,利用设计视图创建追加查询,打开设计视图,选择数据源,3.4.2 追加查询,利用设计视图创建追加查询,选择追加查询类型,执行“查询”/“追加查询”菜单命令 ,或者单击查询设计工具条“查询类型”按钮,选择“追加查询”,3.4.2 追加查询,利用设计视图创建追加查询,设置追加到数据表,在追加到对话框表名称文本框中输入表名。,3.4.2 追加查询,利用设计视图创建追加查询,按
42、要求设计好追加查询设计视图下半部分网格视图。,3.4.2 追加查询,利用设计视图创建追加查询,运行追加查询,并保存追加查询。,3.4.2 追加查询,利用设计视图创建追加查询 【例3-50】: 将研究生表中全部男研究生信息追加到表female中,要求不包含记录中的“性别”信息。,3.4.3 更新查询,更新查询主要作用是对表中已存在的数据记录进行批量修改。,更新查询SQL命令格式:UPDATE 表名SET 字段名1=表达式1,字段名2=表达式2,WHERE 条件,说明: 更新查询对数据表的修改不能违反数据完整性规则 更新查询运行的结果是不可恢复的。,3.4.3 更新查询,【例3-51】将“导师”表
43、每位导师的年龄增加1岁,写出SQL命令。,UPDATE 导师 SET 导师.年龄 = 年龄 +1,3.4.3 更新查询,利用设计视图创建更新查询,打开设计视图,选择数据源,选择更新查询类型,执行“查询”/“更新查询”菜单命令 ,或者单击查询设计工具条“查询类型”按钮,选择“更新查询”,3.4.3 更新查询,利用设计视图创建更新查询,按要求设计好更新查询的下半部分视图,3.4.3 更新查询,利用设计视图创建更新查询,运行更新查询,并保存查询。,3.4.3 更新查询,【例3-52】 计算机系所有男同学的分数增加10%,思考:查询数据源?查询类型?查询视图如何设计?,3.4.4 删除查询,删除查询永
44、久删除指定表中的记录,不能用撤销命令恢复。 SQL命令格式:DELETE FROM 表名 WHERE 条件,注意:执行删除查询前先复制一个副本以备恢复数据,删除查询应遵循数据完整性规则。,3.4.4 删除查询,利用设计视图创建删除查询,打开设计视图,选择数据源,选择删除查询类型,执行“查询”/“删除查询”菜单命令 ,或者单击查询设计工具条“查询类型”按钮,选择“删除查询”,3.4.4 删除查询,利用设计视图创建删除查询,设计删除查询的下半部分设计视图,3.4.4 删除查询,利用设计视图创建删除查询,运行删除查询,并保存查询。,3.4.4 删除查询,【例3-53】用删除查询删除所有入学分数在340分以上的男研究生记录,试写出SQL命令。,DELETE FROM 研究生WHERE 入学分数=340 AND 性别=男,3.4.4 删除查询,利用查询设计视图设计 【例3-53】删除查询: 删除所有入学分数在340分以上的男研究生记录,3.4.4 删除查询,【例3-54】 删除陈平林导师所带研究生分数最低者,