1、Principle and Application of Database system,AnQing Teachers College Department of Computer & Information,数据库原理与应用 Principle and Application of Database system,安庆师范学院计算机与信息学院,Principle and Application of Database system,第9章 查询,9.1 单表查询9.2 连接查询9.3 嵌套查询,Principle and Application of Database system,9.3
2、 嵌套查询,嵌套查询概述 嵌套查询分类 嵌套查询求解方法 引出子查询的谓词,Principle and Application of Database system,嵌套查询(续),嵌套查询概述 一个SELECT-FROM-WHERE语句称为一个查询块 将一个查询块嵌套在另一个查询块的WHERE子句的条件中的查询称为嵌套查询,此查询块称为子查询或内层查询,包含子查询的查询块称为父查询或外层查询。,Principle and Application of Database system,嵌套查询(续),SELECT sno,sname /*外层查询/父查询*/FROM StudentWHERE
3、sno IN(SELECT sno /*内层查询/子查询*/FROM scoreWHERE cno= 3-105),Principle and Application of Database system,嵌套查询(续),子查询不能使用ORDER BY子句 有些嵌套查询可以用连接查询替代,Principle and Application of Database system,嵌套查询分类,不相关子查询 子查询的查询条件不依赖于父查询,子查询的查询条件没用引用父查询表中的属性值。 相关子查询 子查询的查询条件依赖于父查询,子查询的查询条件引用了父查询表中的属性值。,Principle and
4、Application of Database system,嵌套查询求解方法,不相关子查询 是由里向外逐层处理。即每个子查询在 上一级查询处理之前求解,子查询的结果 用于建立其父查询的查询条件。,Principle and Application of Database system,嵌套查询求解方法(续),相关子查询 首先取外层查询中表的第一个元组,把与内层查询相关的属性值代入并处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表; 然后再取外层表的下一个元组; 重复这一过程,直至外层表全部检查完为止。,Principle and Application of Database
5、system,带有IN谓词的子查询 带有比较运算符的子查询 带有ANY或ALL谓词的子查询 带有EXISTS谓词的子查询,Principle and Application of Database system,一、带有IN谓词的子查询,例37 查询与“王芳”在同一个班学习的学生。 此查询要求可以分步来完成: 确定“王芳”所在班 SELECT class FROM student WHERE sname= 王芳结果为:,Principle and Application of Database system,带有IN谓词的子查询(续), 查找所有在95031学习的学生。 SELECT * FROM student WHERE class= 95031 结果为:,Principle and Application of Database system,构造嵌套查询,将第一步查询嵌入到第二步查询的条件中SELECT *FROM studentWHERE class IN(SELECT classFROM studentWHERE sname= 王芳) 此查询为不相关子查询。DBMS求解该查询时也是分步 去做的。,