第4章关系数据库3.ppt
文本预览下载声明
第4章 关系数据库语言SQL 第三部分 回顾上讲 WHERE从句的进一步使用 回顾上讲 数据汇总 聚合函数 回顾上讲 数据汇总 GROUP BY子句 SELECT?[列名], 聚合函数(column) FROM table GROUP BY? [列名] 练习 查询各个班级及其学生的平均年龄 回顾上讲 数据汇总 HAVING短语 SELECT?column, 聚合函数(column) FROM table GROUP BY column HAVING 聚合函数(column) condition value 练习 查询选修了少于10门课程的学生的学号和选修课程数。 回顾上讲 连接查询 同时涉及多个表的查询称为连接查询 一般格式: [表名1.]列名1 比较运算符 [表名2.]列名2 比较运算符:=、、、=、=、!= 等值连接、自然连接、非等值连接 练习:查询名字里有“红”字的同学的学号、姓名、班级、专业名。 4.2.6 嵌套查询 下面讨论另一类基于多个关系的查询,这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系。在前面的例子中,WHERE 之后是一个相对独立的条件,这个条件或者为真、或者为假。但是,有时需要用另外的方式来表达检索要求。比如,当检索关系X中的记录时,它的条件依赖于相关的关系Y中的记录属性值,这时使用SQL的嵌套查询功能将非常方便。 4.2.6 嵌套查询 嵌套查询概述 一个SELECT-FROM-WHERE语句称为一个查询块 将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询 4.2.6 嵌套查询 [例]在STU_INFO表中查询选修了课程编号为090201的学生姓名。 SELECT XM 外层查询/父查询 FROM STU_INFO WHERE XH IN (SELECT XH 内层查询/子查询 FROM XK WHERE KCH=090201) 1. 带IN谓词的子查询 [例] 查询与“曹为涛”在同一个班学习的学生。 此查询要求可以分步来完成 ① 确定“曹为涛”所在班名 SELECT BH FROM STU_INFO WHERE XM= 曹为涛; 结果为: BH 应2k33 1. 带IN谓词的子查询 ② 查找所有在应2k33班学习的学生。 SELECT XH,XM,BH FROM STU_INFO WHERE BH IN (应2k33’) 结果为: 1. 带IN谓词的子查询 构造嵌套查询 将第一步查询嵌入到第二步查询的条件中 SELECT XH,XM,BH FROM STU_INFO WHERE BH IN (SELECT BH FROM STU_INFO WHERE XM=‘曹为涛’) 2. 带有比较运算符的子查询 当能确切知道内层查询返回单值时,可用比较运算符(,,=,=,=,!=或 )。 2. 带有比较运算符的子查询 例:假设一个学生只可能在一个班学习,并且没有和曹为涛重名的同学,则在上例可以用 = 代替IN : SELECT XH,XM,BH FROM STU_INFO WHERE BH= (SELECT BH FROM STU_INFO WHERE XM=‘曹为涛’) 3. 带有ANY或ALL谓词的子查询 谓词语义 ANY、SOME:任意一个值 ALL:所有值 其通用格式为: 列比较运算符[ALL|ANY]内部查询 3. 带有ANY或ALL谓词的子查询 需要配合使用比较运算符 ANY 大于子查询结果中的某个值 ALL 大于子查询结果中的所有值 ANY 小于子查询结果中的某个值 ALL 小于子查询结果中的所有值 = ANY 大于等于子查询结果中的某个值 = ALL 大于等于子查询结果中的所有值 = ANY 小于等于子查询结果中的某个值 = ALL 小于等于子查询结果中的所有值 = ANY 等于子查询结果中的某个值 =ALL 等于子查询结果中的所有值(通常没有实际意义) !=(或)ANY 不等于子查询
显示全部