欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    数据库技术与应用第06章.ppt

    • 资源ID:6578525       资源大小:275.50KB        全文页数:54页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据库技术与应用第06章.ppt

    第6章 查询管理 本章导读 查询管理主要介绍如何从数据库中使用SELECT语句查询数据的方法。本章详细介绍了SELECT语句的条件子句、排序子句和分组子句,实现了数据的排序,分组汇总。,6.1 SELECT查询语句,6.1.1 SELECT语句的执行窗口,方法一:使用查询设计器,方法二:使用SQL编辑器,6.1 SELECT查询语句,1SELECT-FROM-WHERE句型,1)格式SELECT INTO FROM(或视图序列)WHERE 2)功能“”指定要选择的属性或表达式,子句“INTO”将查询结果存放到指定新表“FROM(或视图序列)”指定数据来源表“WHERE”指定查询出的记录行需满足的条件,6.1.2 简单查询,2简单查询示例,6.1.2 简单查询,1)选择指定的属性列,【例6.1】查询所有学生可选的课程信息。SELECT*FROM C-“*”表示选择当前表的所有属性列【例6.2】查询数据库studentcourse学生基本信息表s中学生的学号,姓名,所在系。SELECT 学号,姓名,系 FROM S2)消除结果集中的重复行格式SELECT DISTINCT 属性列表【例6.3】查询所有被选修的课程。SELECT DISTINCT 课程号 FROM SC,2简单查询示例,6.1.2 简单查询,3)设置属性列的别名,【例6.4】查询表s的学号和姓名信息,其中设置学号的别名为xh,设置姓名的别名为xmSELECT 学号 AS xh,姓名 AS xm FROM S或SELECT 学号 AS xh,姓名 AS xm FROM S或SELECT 学号 AS xh,姓名 AS xm FROM S或SELECT xh=学号,xm=姓名 FROM S,2简单查询示例,6.1.2 简单查询,【例6.5】列出表S中学生的学号和出生年份情况。SELECT 学号,出生年份=year(出生日期)FROM s 或SELECT 学号,year(出生日期)as 出生年份 FROM s 5)通过TOP子句限制结果集输出的行数(1)命令格式SELECT TOP n PERCENT 属性列表(2)功能 n是为正整数,如果指定PERCENT关键字,则返回前百分之n条记录(向上取整),n必须介于0到100之间的正整数。比如“SELECT TOP 3”表示输出查询结果集的前3行,“SELECT TOP 3 PERCENT”表示输出查询结果集的前3%记录行。,4)使用查询表达式查询语句SELECT可直接查询表达式的值。,2简单查询示例,6.1.2 简单查询,6)INTO子句的使用【例6.8】将课程成绩70分以下的同学的成绩提高5分,然后把结果存储到新数据表“最新成绩”中。SELECT 成绩+5 AS 最新成绩 INTO 最新成绩 FROM sc WHERE 成绩70【例6.9】求管理信息系学生的详细信息,并将这些信息另存到数据表“管理信息系”中。SELECT*INTO 管理信息系 FROM S WHERE 系=管理信息系,【例6.10】在基本表S中检索1978-01-06出生的学生情况。SELECT*FROM s WHERE 出生日期=1978-01-06【例6.11】在基本表S中检索1978年及以后出生的学生情况。SELECT*FROM s WHERE year(出生日期)=1978或SELECT*FROM s WHERE year(出生日期)!1985-01-05或SELECT*FROM s WHERE 出生日期1985.01.05,6.1.3 表达式运算符,1)比较运算符,【例6.13】在基本表S中检索1980-04-15以前出生的学生情况。SELECT*FROM s WHERE 出生日期4/15/1980或SELECT*FROM s WHERE 出生日期19800415【例6.14】列出表S中管理信息系年龄小于28岁的学生的学号和出生年份情况。SELECT 学号,year(出生日期)as 出生年份 FROM s WHERE 系=管理信息系 and(year(getdate()-year(出生日期)28,1)比较运算符,6.1.3 表达式运算符,(1)字符串比较运算符“LIKE”格式如下:s NOT LIKE p ESCAPE通配符字符【例6.15】在表S中查询管理信息系学生的姓名。SELECT 姓名 as 姓名,系 as 所在院系 FROM S WHERE 系 LIKE 管理信息系【例6.16】查询陈老师所教的课程信息。SELECT*FROM c WHERE 教师 LIKE 陈%,6.1.3 表达式运算符,2)字符串运算符,【例6.17】在基本表S中检索出生日期包含13的学生情况。SELECT*FROM s WHERE 出生日期 like%13%【例6.18】如果要找出其姓名中不含有“红”的学生情况,则在LIKE前增加NOT。SELECT*FROM s WHERE 姓名 NOT LIKE%红%【例6.19】在基本表S中检索以“王”姓打头,名字由1个汉字组成的学生姓名。SELECT 姓名 FROM s WHERE 姓名 LIKE 王_【例6.20】在学生基本信息表S中检索姓名为“王_”的学生。SELECT 姓名 FROM s WHERE 姓名 LIKE 王/_ escape/,6.1.3 表达式运算符,2)字符串运算符,【例6.21】在基本表S中检索1975年出生或者姓王的学生情况。SELECT*FROM s WHERE year(出生日期)=1975 OR 姓名 LIKE 王%【例6.22】在基本表S中检索在1970年到1980年之间出生的学生情况。SELECT*FROM s WHERE year(出生日期)1970 and year(出生日期)1980【例6.23】在基本表S中检索不在管理信息系的学生情况。SELECT*FROM s WHERE not(系=管理信息系)或SELECT*FROM s WHERE 系!=管理信息系,6.1.3 表达式运算符,3)逻辑运算符,(1)格式表达式1 NOT BETWEEN 表达式2 AND 表达式3(2)功能注意,表达式2的值不能大于表达式3的值。表达式“成绩 BETWEEN 65 AND 70”与表达式“成绩=65 and 成绩=65 AND 成绩=70,6.1.3 表达式运算符,4)指定范围运算符,【例6.25】在S中检索不在1980年出生的学生学号与姓名信息。SELECT*FROM s WHERE 出生日期not BETWEEN 1980-01-01 AND 1980-12-315)集合成员资格运算符 集合成员资格运算符IN可以比较表达式的值与值表中的值是否匹配,如果匹配,则返回TRUE,否则返回FALSE。格式如下:表达式1 NOT IN(表达式2,n)【例6.26】查询成绩为70、80、90分的学生学号、课程号、成绩。SELECT 学号,课程号,成绩 FROM sc WHERE 成绩 IN(70,80,90),6.1.3 表达式运算符,6.1.2 简单查询,【例6.27】在S中检索学生学号不是G0401,G0402,J0403的学生信息。SELECT*FROM s WHERE 学号 not in(G0401,G0402,J0403)等价于SELECT*FROM s WHERE 学号 G0401and 学号 G0402and 学号 J0403【例6.28】在SC中检索课程号是C01,C02,C03的学生成绩信息。SELECT 学号,成绩 FROM sc WHERE 课程号 in(c01,c02,c03)等价于SELECT 学号,成绩 FROM sc WHERE 课程号=c01or 课程号=c02 or 课程号=c03,6.1.2 简单查询,6)空值比较运算符SQL中允许列值为空,空值用保留字NULL表示。查询空值操作不是=null,而是用 IS NULL来测试。格式表达式 IS NOT NULL功能缺省NOT时,当表达式的值为空时,返回TRUE,否则返回FLASE。【例6.29】查询缺少成绩的学生的学号和相应的课程号。(某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。)SELECT 学号,课程号 FROM sc WHERE 成绩 IS NULL【例6.30】查询有选修成绩的学生的学号和相应的课程号。SELECT 学号,课程号 FROM sc WHERE 成绩 IS NOT NULL,6.2排序子句,1格式SELECT INTO FROM(或视图序列)WHERE ORDER BY属性名ASC|DESC,n-排序子句 2功能 排序子句“ORDER BY属性名ASC|DESC,n”设置信息输出的排序规则,用户可以按照一个或多个属性列升序(ASC)或降序(DESC)排列查询结果。缺省ASC|DESC选项时,系统默认为升序排列。当指定ASC选项时,将最后显示属性列为空值的记录。当指定DESC选项时,将最先显示属性列为空值的记录。,【例6.31】将所有女生按年龄升序排序。SELECT*FROM s WHERE 性别=女 ORDER BY 出生日期 ASC【例6.32】将SC数据表中的信息按学生学号升序,课程号降序排列。【例6.33】在SC表中,查询学号为J0401的同学获得最高成绩的课程号。【例6.34】在SC表中,找出选修了课程号为C02的课程,而且课程成绩最高的前两位同学。,6.2排序子句,1条件连接在WHERE子句中使用比较运算符给出连接条件对表进行连接。1)格式WHERE 表名1.列名1 比较运算符 表名2.列名22)功能 其中,各连接列名的类型必须是可比的。当查询的信息涉及多张数据表时,往往先读取FORM子句中基本表或视图的数据,执行广义笛卡尔积,在广义笛卡尔积中选取满足WHERE子句中给出的条件表达式的记录行。当引用一个在多张数据表中均存在的属性时,则要明确指出这个属性的来源表。关系中属性的引用格式为.。当比较运算符是“=”时,就是自然连接,即按照两个表中的相同属性进行等值连接,并且目标列中去掉了重复的属性列,保留了所有不重复的属性列。,6.3 连接运算,6.3.1 谓词连接,【例6.35】查询管理信息系学生的学号、姓名、选修的课程号和得分。SELECT S.学号,姓名,课程号,成绩 FROM S,SC WHERE S.学号=SC.学号 AND 系=管理信息系【例6.36】查询所有学生的情况以及他们选修的课程号和得分。SELECT S.*,SC.课程号,SC.成绩 FROM S,SC WHERE S.学号=SC.学号【例6.37】查询所有学生的姓名以及他们选修的课程号和得分。SELECT S.姓名,C.课程号,SC.成绩 FROM S,C,SC WHERE S.学号=SC.学号 AND C.课程号=SC.课程号,6.3 连接运算,6.3 连接运算,2自身连接1)格式SELECT 表名1或表名2.列名 FROM 表1 as表名1,表1 as表名2 WHERE 表名1.列名1 比较运算符 表名2.列名22)功能自身连接时,查询涉及同一个关系数据表的两个甚至更多个记录,如何指定关系数据表的每一个出现值。也就是参与连接的两个表都是某一基本表的副表。【例6.38】查询与“王永明”在同一个系学习的学生。SELECT s1.学号,s1.姓名,s1.系 FROM s s1,s s2 WHERE s1.系=s2.系 AND s2.姓名=王永明,1内连接1)格式SELECT 列名 FROM 表1 INNER JOIN 表2 ON 2)功能INNER JOIN 内连接按照ON指定的连接条件合并两个表,只返回满足条件的行,也可用于多个表的连接。只返回符合查询条件或连接条件的行作为结果集,即删除所有不符合限定条件的行。【例6.40】查询选修了c01号课程且成绩及格的学生姓名及成绩。其中,INNER关键字可省略。SELECT 姓名,成绩 FROM s JOIN sc ON s.学号=sc.学号-左表是s,右表是sc WHERE 课程号=c01 AND 成绩=60,6.3.2 JOIN连接,2外连接外连接不但包含满足条件的行,还包括相应表中的所有行,只能用于两个表的连接。实际上基本表的外连接操作可以分为3类:1)左外连接(1)格式SELECT 列名 FROM 表1 LEFT OUTER JOIN 表2 ON JOIN(2)功能返回满足条件的行,及左表R中所有的行。如果左表的某条记录在右表中没有匹配记录,则在查询结果中右表的所有选择属性列用NULL填充。2)右外连接(1)格式SELECT 列名 FROM 表1 RIGHT OUTER JOIN 表2 ON,6.3.2 JOIN连接,(2)功能返回满足条件的行,及右表K所有的行。如果右表的某条记录在左表中没有匹配记录,则在查询结果中左表的所有选择属性列用NULL填充。3)全外连接(1)格式SELECT 列名 FROM 表1 FULL OUTER JOIN 表2 ON(2)功能返回满足条件的行,及左右表R、K所有的行。当某条记录在另一表中没有匹配记录,则在查询结果中对应的选择属性列用NULL填充。其中,OUTER关键字均可省略。,6.3.2 JOIN连接,【例6.41】检索每个学生的姓名、选修课程和成绩,没有选修的同学也列出来。左外连接:SELECT s.姓名,sc.课程号,sc.成绩 FROM s LEFT JOIN sc on s.学号=sc.学号右外连接:SELECT s.姓名,sc.课程号,sc.成绩 FROM sc RIGHT JOIN s on s.学号=sc.学号,6.3.2 JOIN连接,3交叉连接(1)格式SELECT 列名 FROM 表1 CROSS JOIN 表2(2)功能 相当于广义笛卡尔积。不能加筛选条件,即不能带WHERE子句。结果表是第一个表的每行与第二个表的每行拼接后形成的表,结果表的行数等于两个表行数之积。【例6.43】列出所有学生所有可能的选课情况。SELECT 学号,姓名,课程号,课程名 FROM s CROSS JOIN c如果有七名学生,五门课程,则交叉连接后,记录行数为35行。,6.3.2 JOIN连接,1聚合函数SQL提供了许多集合函数用来统计汇总信息,常用的包括:COUNT(DISTINCT/ALL*):统计元组的个数。COUNT(DISTINCT/ALL 数值表达式):统计一列中值的个数,除非使用DISTINCT,否则,重复元组的个数也计算在内。SUM(DISTINCT/ALL 数值表达式):计算一列值的总和(该列必须是数值型)AVG(DISTINCT/ALL 数值表达式):计算一类值的平均值(该列必须是数值型)MAX(DISTINCT/ALL 表达式):求一列值中的最大值 MIN(DISTINCT/ALL 表达式):求一列值中的最小值 聚合函数对一组值执行计算,并返回单个值。除了COUNT以外,聚合函数都会忽略空值。在SELECT子句、HAVING子句和COMPUTE子句或COMPUTE BY 子句中可以使用聚合函数,在WHERE子句中不能使用聚合函数。,6.4 聚合函数,【例6.44】求男学生的总人数和平均年龄。SELECT COUNT(*)AS 男生人数,AVG(year(getdate()-year(出生日期)AS 平均年龄FROM sWHERE 性别=男【例6.45】查询选修了c01课程的总人数及这门课的平均成绩。SELECT COUNT(DISTINCT 学号)AS 选修c01课程人数,AVG(成绩)AS 平均成绩 FROM sc WHERE 课程号=c01【例6.46】查询选修了c01课程的学生的最高分和最低分SELECT MAX(成绩)AS 课程c01最高分,MIN(成绩)AS 课程c01最低分FROM sc WHERE 课程号=c01,6.4 聚合函数,1格式SELECT 列名表(逗号隔开)FROM 基本表或视图序列 WHERE 条件表达式-条件子句GROUP BY ALL 属性名表-分组子句HAVING 组条件表达式-组条件子句2功能 根据分组子句GROUP BY 属性名表对表中记录行进行分组。使用了GROUP BY子句后,将为结果集中的每一行产生聚合值。SELECT子句里的列只能包含在GROUP BY子句里指定的列中或在聚合函数里指定的列中。,6.5 分组汇总与分类汇总,6.5.1 分组汇总,【例6.47】从sc表中查询被学生选修了的课程。SELECT 课程号 FROM sc GROUP BY 课程号【例6.48】查询数据库中各个系的学生人数。SELECT COUNT(*)AS 各系学生人数 FROM s GROUP BY 系【例6.49】查询每个学生课程成绩在88分以上的课程的平均成绩。SELECT 学号,avg(成绩)as 平均成绩 FROM sc WHERE 成绩88 GROUP BY 学号,6.5.1 分组汇总,【例6.50】查询每个学生课程成绩在88分以上的课程的平均成绩(不满足的成绩以空值代替)。SELECT 学号,avg(成绩)as 平均成绩FROM sc where 成绩88 GROUP BY all 学号【例6.51】查询选修课程4门及以上并且成绩都在65分以上的学生的学号和平均成绩。SELECT 学号,AVG(成绩)AS 平均成绩 FROM sc WHERE 成绩=65GROUP BY 学号 HAVING COUNT(课程号)=4,6.5.1 分组汇总,1)格式SELECT INTO FROM(或视图序列)WHERE ORDER BY属性名ASC|DESC,n-排序子句 COMPUTE BY 集函数(列名)2)功能 COMPUTE子句后直接跟需要被汇总(聚合)的字段,并通过其自带的BY子句指定分组依据,但要求COMPUTE BY后跟的关键字,必须出现在ORDER BY中。否则不能正确执行。,1.COMPUTE子句,1)格式SELECT INTO FROM(或视图序列)WHERE ORDER BY 属性名ASC|DESC,n-排序子句 GROUP BY ALL 属性名表-分组子句WITH CUBE2)功能 WITH CUBE子句与GROUP BY联合使用,可以按照GROUP BY中指定的字段对整个数据表进行分类汇总。分类汇总时,会对GROUP BY中指定的所有字段进行组合汇总。并且使用GROUPING函数将执行汇总所得的那条记录标识为1,可以很清楚地区分查询结果中带NULL值的记录,哪些是原记录中含有NULL值字段的记录,而哪些是新生成的汇总记录。,2.WITH CUBE子句,【例6.52】查询管理信息系学生的学号、姓名,并产生一个学生总人数行。SELECT 学号,姓名,系 FROM S WHERE 系=管理信息系COMPUTE COUNT(学号)【例6.53】查询每个学生的平均成绩,并汇总所有学生所有课程成绩的平均分。SELECT 学号,avg(成绩)as 平均成绩 FROM sc GROUP BY 学号 with cube-是所有学生所有课程成绩的平均分。,2.WITH CUBE子句,6.6.1 子查询的制约规则(1)子查询的选择列表中不允许出现Ntext、Text和Image。(2)包括GROUP BY的子查询不能使用DISTINCT关键字。(3)不能指定COMPUTE和INTO子句。(4)只有在子查询中使用TOP关键字,才可以指定ORDER BY子句。(5)由子查询创建的视图不能更新。(6)如果外部查询的WHERE子句包括某个列名,则该子句必须与子查询选择列表中的该列在连接上兼容。(7)通过比较运算符引入的子查询选择列表只能包括一个表达式或列名称(对SELECT*执行的EXISTS或对列表执行的IN子查询除外)。(8)由于必须返回单个值,所以由未修改的 比较运算符(即后面未跟关键字ANY或ALL的运算符)引入的子查询不能包含GROUP BY和HAVING子句。(9)不能在ORDER BY、GROUP BY或COMPUTE BY之后使用子查询。(10)子查询中不能使用UNION关键字。(11)LOB(大对象数据)类型的字段不能作为子查询的比较条件。,6.6 子查询,6.6.2 无关子查询(不相关子查询),1用作查询语句中的列表达式的子查询,【例6.55】查询学生的学号、课程号及对应成绩与所有学生所有课程的最高成绩的百分比。SELECT 学号,课程号,与最高成绩之百分比=成绩*100/(SELECT max(成绩)from sc)FROM sc【例6.56】查找学号为J0401的成绩、全部课程的平均成绩,以及每门成绩与全部课程的平均成绩之间的距离。SELECT 学号,成绩,(SELECT AVG(成绩)FROM sc)AS average,成绩-(SELECT AVG(成绩)FROM sc)AS differenceFROM scWHERE 学号=J0401,6.6.2 无关子查询(不相关子查询),【例6.57】查询陈小红同学的学号及所选修的课程号。方法一:SELECT子查询。SELECT 学号,课程号 FROM scWHERE 学号=(SELECT 学号 FROM s WHERE 姓名=陈小红)该示例也可以用以下SELECT连接查询获得相同的结果集。方法二:SELECT连接SELECT 学号,课程号FROM s JOIN sc ON(s.学号=sc.学号)WHERE 姓名=陈小红,2使用比较运算符的子查询,6.6.2 无关子查询(不相关子查询),WHERE 比较运算符 NOT ALL(子查询)子查询的结果集的列必须与表达式1有相同的数据类型,结果类型为布尔型。SALL R:当S大于子查询R中的每一个值,该条件为真TRUE。NOT SALL R:当且仅当S不是R中的最大值,该条件为真TRUE【例6.59】查询比所有汽车系的学生年龄都小的学生。SELECT*FROM sWHERE 出生日期 ALL(SELECT 出生日期 FROM s WHERE 系=汽车系),3使用谓词ALL的子查询,6.6.2 无关子查询(不相关子查询),ANY确定给定的值是否满足子查询或列表中的部分值。语法如下:WHERE比较运算符 NOT ANY(子查询)SANY R:当且仅当S至少大于子查询R中的一个值,该条件为真TRUE。NOT SANY R:当且仅当S是子查询R中的最小值,该条件为真TRUE。【例6.61】检索成绩小于任何一个选修C02课程的学生的成绩的学生学号。SELECT distinct 学号 FROM scWHERE 成绩Any(SELECT 成绩 FROM sc WHERE 课程号=C02),4使用谓词ANY 的子查询,6.6.2 无关子查询(不相关子查询),【例6.62】查询选修c02课程且成绩不低于选修c01课程的最低成绩的学生的学号。SELECT 学号 FROM sc WHERE 课程号=c02 AND 成绩!ANY(SELECT 成绩 FROM sc WHERE 课程号=c01),4使用谓词ANY 的子查询,6.6.2 无关子查询(不相关子查询),IN确定给定的值是否与子查询或列表中的值相匹配。语法如下:WHERE表达式 NOT IN(子查询|表达式1,.n)子查询的结果集的列必须与表达式1具有相同的数据类型。子查询的结果类型为布尔型。S IN R:当且仅当S等于R中的一个值,该条件为真TRUE。S NOT IN R:当且仅当S不属于R中的一个值,该条件为真TRUE。,5使用谓词IN的子查询,6.6.2 无关子查询(不相关子查询),【例6.63】查询选修了数据库课程成绩在80分以上的学生的学号及成绩。SELECT 学号,成绩 FROM sc WHERE 课程号 IN(SELECT 课程号 FROM c WHERE 课程名=数据库)AND 成绩=80【例6.64】求选修了课程C02和C04的学生的学号和姓名。SELECT s.学号,s.姓名 FROM s,sc WHERE s.学号=sc.学号 AND 课程号=C02 AND s.学号 IN(SELECT 学号 FROM sc WHERE 课程号=C04),5使用谓词IN的子查询,6.6.2 无关子查询(不相关子查询),【例6.65】求选修了课程C02但没有选修课程C04的学生的学号和姓名。SELECT s.学号,s.姓名 FROM s,scWHERE s.学号=sc.学号 AND 课程号=C02 ANDs.学号 not IN(SELECT 学号 FROM sc WHERE 课程号=C04)【例6.66】查询没有选修c01课程的学生姓名。SELECT 学号,姓名 FROM s WHERE 学号 NOT IN(SELECT 学号 FROM sc WHERE 课程号=c01),5使用谓词IN的子查询,6.6.3 相关子查询,【例6.67】查询所有选修了c01课程的学生姓名。SELECT 姓名 FROM s WHERE EXISTS(SELECT*FROM sc WHERE 学号=s.学号 AND 课程号=c01)【例6.68】查询没有选修c01课程的学生姓名及性别。SELECT 姓名,性别 FROM s WHERE NOT EXISTS(SELECT*FROM sc WHERE 学号=s.学号 AND 课程号=c01),1谓词运算符EXISTS,6.6.3 相关子查询,【例6.69】查找最高成绩超过给定学生平均成绩10分的学生。SELECT t1.学号 FROM sc t1GROUP BY t1.学号HAVING MAX(t1.成绩)=ALL(SELECT 10+AVG(t2.成绩)FROM sc t2 WHERE t1.学号=t2.学号)在上例中,为外部查询中定义的每一个组各评估一次子查询(每次一个学生)。,2HAVING 子句中的相关子查询,子查询自身可以包括一个或者多个子查询,一般嵌套的层数不宜过多。【例6.70】求选修“C语言”课程的学生学号和姓名。SELECT 学号,姓名 FROM S WHERE 学号 IN(SELECT 学号 FROM S WHERE 课程号 IN(SELECT 课程号 FROM C WHERE 课程名=C语言),6.6.4 子查询的多层嵌套,子查询可以嵌套在UPDATE、INSERT和DELETE语句中。【例6.72】陈小红的成绩加2分。该查询更新sc表;其子查询引用s表。UPDATE scSET 成绩=成绩+2WHERE 学号 IN(SELECT 学号 FROM s WHERE 姓名=陈小红)下面是使用连接的等效 UPDATE 语句:UPDATE scSET 成绩=成绩+2FROM sc INNER JOIN s ON s.学号=sc.学号 AND 姓名=陈小红goselect*from sc,6.6.5 UPDATE、INSERT和DELETE语句中的子查询,【例6.73】当C04课的成绩低于该门课程平均成绩时,提高5%。【例6.74】将sc表中成绩最高的减去20分。【例6.75】将学生成绩排在前5名的成绩减去20分。【例6.76】将总分在前10%的学生的成绩减去20分。【例6.77】把目前为止还没有选修课程的学生自动增加选修c01的课程的记录并插入到SC中表。【例6.78】删除陈小红的所有选修记录。【例6.79】把C04课程中小于该课程平均成绩的成绩记录从基本表SC中删除.,6.6.5 UPDATE、INSERT和DELETE语句中的子查询,1格式SELECT 查询语句1UNION ALLSELECT 查询语句2n2功能 查询结果的结构一致时可将两个查询进行并(UNION)操作。要求查询属性列的数目和顺序都必须相同,对应属性列的数据类型兼容。,6.7 并运算,【例6.81】求选修了课程C02或C04的学生的学号、姓名,不包含重复的记录行。(SELECT s.学号,s.姓名 FROM s,scWHERE s.学号=sc.学号 AND 课程号=C02)UNION(SELECT s.学号,s.姓名 FROM s,scWHERE s.学号=sc.学号 AND 课程号=C04)【例6.82】求选修了课程C02或C04的学生的学号、姓名,包含重复记录行。【例6.83】求选修了课程C01、C02、C03的学生的学号、姓名,不包含重复记录行。,6.7 并运算,1语法结构SELECT-它可以是星号(*)、表达式、列表、变量等。INTO新表-用查询结果集合创建一个新表FROM(或视图序列)-最多可以指定16个表或者视图,用逗号相互隔开。WHERE条件表达式 GROUP BY 属性名表-分组子句 HAVING 组条件表达式-组条件子句 ORDER BY 属性名ASC|DESC.-排序子句 COMPUTE 集函数(列名)-汇总子句,6.8 SELECT查询语句总结,2功能 SELECT子句用于指出查询结果集合中的列数和属性;FROM子句指出所查询的表名以及各表之间的逻辑关系;WHERE子句:指出查询条件,它说明将表中的哪些数据行返回到结果集合中;ORDER BY子句:说明查询结果行的排列顺序;GROUP BY、HAVING子句查询结果集合中各行的统计方法;COMPUTE子句后面跟集函数(列名),具有统计汇总该列相关值的功能。,6.8 SELECT查询语句总结,3语句执行过程(1)读取FROM子句中的基本表、视图和数据,执行广义笛卡尔积操作。(2)选取满足WHERE子句中给出的条件表达式的元组。(3)按GROUP BY子句中指定列的值分组,同时提取满足HAVING子句中组条件表达式的那些组。(4)按SELECT子句中给出的列名或列表达式求值输出。(5)ORDER BY子句对输出的目标表进行排序,按附加说明ASC升序排列,或按DESC降序排列。【例6.84】【例6.108】,6.8 SELECT查询语句总结,

    注意事项

    本文(数据库技术与应用第06章.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开