SQL 子查询 详细整理

子查询分为两种:
非相关子查询(独立子查询)
相关子查询

①独立子查询可以单独执行,所以先执行后,得到的

     整个查询中子查询只执行一次,执行完后再执行外层查询;

②相关子查询是指子查询(内层查询)中引用了外层查询所引用表的字段,

     因此外层查询处理每一条记录时都必须执行一次子查询,

     因为子查询中引用的字段的值发生了变化。

③单行子查询

(1) 单行子查询的特点是什么?

	仅返回一行

	使用单行比较符

(2) 主查询对子查询结果的单行比较运算符有哪些?

	= > >= < <= <>(不等于)

④.在子查询中使用组函数与HAVING子句

⑤. 什么是子查询错误?

使用子查询的一个常见错误是单行子查询返回了多行

⑥.多行子查询中IN运算符

⑦. 什么是多行子查询?

返回多于一行

使用多行比较符

⑧.主查询对子查询的多行比较运算符有哪些?

In:等于列表中的任何成员

Any 比较子查询返回的,每个值

All 比较子查询返回的全部值

⑨ SQL查询:子查询和联表查询有什么区别,

一般来说子查询和关联子表的性能,相对来说 关联表要好一些。

为什么呢?

主要在于优化器更加倾向于去优化 关联查询,且关联查询相对来说更易理解,语句也相对简单,所以优化效果比较好,能生成较优的执行计划。

但是,这个也不确定,性能是否好,还是要看优化器生成的执行计划,如果子查询生成的执行计划更好,那么就会更快。

注意点

1、如果只需要返回 一个表的数据,建议用exists 或者in。

2、如果要返回2个或多个表的数据,那么就用关联。

总结:

相关子查询的执行依赖于外部查询,一般是在where子句中引用外部的表。执行过程如下:

(1)从外层查询中取出一个元组,将元组相关列的值传给内层查询。

(2)执行内层查询,得到子查询操作的值。

(3)外查询根据子查询返回的结果或结果集得到满足条件的行。

(4)然后外层查询取出下一个元组重复做步骤1-3,直到外层的元组全部处理完毕。
 

【转载注明出处,希望尊重原创 】

【作者水平有限,如有错误欢迎指正 .】

原创文章 72 获赞 94 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_46163590/article/details/106170857