ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL 子查询 详细整理

2020-05-18 19:36:50  阅读:276  来源: 互联网

标签:返回 多行 外层 查询 单行 详细 SQL 执行


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

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

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

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

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

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

③单行子查询

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

	仅返回一行

	使用单行比较符

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

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

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

⑤. 什么是子查询错误?

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

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

⑦. 什么是多行子查询?

返回多于一行

使用多行比较符

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

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

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

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

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

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

为什么呢?

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

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

注意点

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

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

总结:

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

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

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

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

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

 

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

 

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

标签:返回,多行,外层,查询,单行,详细,SQL,执行
来源: https://blog.csdn.net/weixin_46163590/article/details/106170857

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有