子查询分为两种:
非相关子查询(独立子查询)
相关子查询
①独立子查询可以单独执行,所以先执行后,得到的
整个查询中子查询只执行一次,执行完后再执行外层查询;
②相关子查询是指子查询(内层查询)中引用了外层查询所引用表的字段,
因此外层查询处理每一条记录时都必须执行一次子查询,
因为子查询中引用的字段的值发生了变化。
③单行子查询
(1) 单行子查询的特点是什么?
仅返回一行
使用单行比较符
(2) 主查询对子查询结果的单行比较运算符有哪些?
= > >= < <= <>(不等于)
④.在子查询中使用组函数与HAVING子句
⑤. 什么是子查询错误?
使用子查询的一个常见错误是单行子查询返回了多行
⑥.多行子查询中IN运算符
⑦. 什么是多行子查询?
返回多于一行
使用多行比较符
⑧.主查询对子查询的多行比较运算符有哪些?
In:等于列表中的任何成员
Any 比较子查询返回的,每个值
All 比较子查询返回的全部值
⑨ SQL查询:子查询和联表查询有什么区别,
一般来说子查询和关联子表的性能,相对来说 关联表要好一些。
为什么呢?
主要在于优化器更加倾向于去优化 关联查询,且关联查询相对来说更易理解,语句也相对简单,所以优化效果比较好,能生成较优的执行计划。
但是,这个也不确定,性能是否好,还是要看优化器生成的执行计划,如果子查询生成的执行计划更好,那么就会更快。
注意点
1、如果只需要返回 一个表的数据,建议用exists 或者in。
2、如果要返回2个或多个表的数据,那么就用关联。
总结:
相关子查询的执行依赖于外部查询,一般是在where子句中引用外部的表。执行过程如下:
(1)从外层查询中取出一个元组,将元组相关列的值传给内层查询。
(2)执行内层查询,得到子查询操作的值。
(3)外查询根据子查询返回的结果或结果集得到满足条件的行。
(4)然后外层查询取出下一个元组重复做步骤1-3,直到外层的元组全部处理完毕。