数据库基础总结(六)——嵌套查询

嵌套查询

关系例子
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询数据库基础总结(六)——嵌套查询
◼ 上层的查询块称为外层查询或父查询
◼ 下层查询块称为内层查询或子查询
◼ SQL语言允许多层嵌套查询
◼ 子查询的限制
⚫ 不能使用ORDER BY子句

❖不相关子查询:
子查询的查询条件不依赖于父查询
◼ 由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。

❖相关子查询:子查询的查询条件依赖于父查询
◼ 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表
◼ 然后再取外层表的下一个元组
◼ 重复这一过程,直至外层表全部检查完为止

1)带有in谓词的子查询

数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询

2)带有比较运算符的子查询

数据库基础总结(六)——嵌套查询

3)带有any或all谓词的子查询

使用ANY或ALL谓词时必须同时使用比较运算
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询

4)带有exists谓词的子查询

❖ EXISTS谓词
◼ 带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。
⚫ 若内层查询结果非空,则外层的WHERE子句返回真值
⚫ 若内层查询结果为空,则外层的WHERE子句返回假值

◼ 由EXISTS引出的子查询,其目标列表达式通常都用 * ,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义。
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询
数据库基础总结(六)——嵌套查询