- 一个select-from-where语句称为一个
查询块
,一个查询块嵌套在另一个查询块的where或having短语的条件中的查询称为嵌套查询
- 下层的查询块称为子查询
- order by不能用在子查询中,其只能对最终查询结果排序
不相关子查询和相关子查询
- 不相关子查询的查询条件不依赖于父查询(子查询可独立单独运行),执行顺序由里向外
- 相关子查询的查询条件
依赖
于父查询,执行顺序由外向里
IN谓词子查询
- 子查询结果是
单个属性
的值的集合 - 可能是不相关也可能是相关子查询
比较运算符子查询
- 运算符如>、<、=、!=等
- 子查询结果只能是
单个值
- 可能是不相关也可能是相关子查询
带有ANY或ALL谓词的子查询
比较运算符和any或all谓词的组合,可能是不相关也可能是相关子查询
- any是指子查询结果中的
某个
值- all是指子查询结果中的
所有
值
谓词 | 含义 |
---|---|
>any | 大于子查询结果的某个值 |
>all | 大于子查询结果的所有值 |
=any | 等于子查询结果的某个值 |
…. | …. |
EXISTS子查询
- 带有exists谓词的子查询不返回任何数据,只产生true或false,所以子查询中列名用*,因为此处列名无意义
- 肯定是相关子查询
- exists外部表
每一条记录逐条代入
子查询,子查询有数据则返回true,父查询的where如果都为true则保留此条记录为结果