按值不同可以分为
1.标量子查询
只有一个值
2.列子查询
一列(一个字段),多个值
3.行子查询(表子查询)
一行多列/多行多列
注意:
1.标量子查询前用单行操作符 >,>=,<,<=,=,等
2.多个值的子查询(列子查询,行子查询)用多行操作符
in/not in
any/some
all
按与外层查询有无关系 ,可以划分为
1.独立子查询
只执行一次 ,不会影响外层查询的效率
2.依赖子查询(实际开发过程中禁止使用)
在每次where或having执行时都会查询一次,浪费内存与时间。
代替方案:使用独立子查询讲依赖子查询查出来的数据读取出来生成一个新的临时表,使用这个临时表与原表连接合并。
各个位置的子查询规则
select后只可以接标量子查询(一个值)
from后可以接任意子查询作为临时表
where 和 having后的规则一致。可以接任意子查询。注意符号即可。
注:建议只在from后使用子查询。