前段时间有一个相关子查询的SQL语句,看不太懂他是如何执行的,为什么会出现那个结果。着实纠结了一把。下面来讲一下非相关子查询和相关子查询的执行过程是怎样的。

非相关子查询

先看一个非相关子查询到sql语句。

需求:查询学生表student和学生成绩表grade中成绩为70分的学生的基本信息。

select t.sno,t.sname,t.sage,t.sgentle,t.sbirth,t.sdept from student t where t.sno in (select f.sno from garde f where f.score=70)

这个sql语句的执行时是简单的,

1、在grade表中找出成绩为70的学生学号sno,再将该学号返回到父查询作为where子句的条件。

2、在student表中找到该学号学生的其他基本信息。

相关子查询

所谓相关子查询,是指求解相关子查询不能像求解普通子查询那样,一次将子查询求解出来,然后求解父查询。相关子查询的内层查询由于与外层查询有关,因此必须反复求值。

下面看相关子查询的sql语句。

需求:在学生表student和学生成绩表grade找出参加了“计算机基础”课程并且分数在80分以上的所有学生信息。

select t.sno,t.sname,t.sage,t.sgentle,t.sbirth,sdept from student t where 80<=(select f.score from grade f where f.sno=t.sno and f.cname='计算机基础')

该子查询的执行流程:

1、 先从父查询的student表中取出第一条记录的sno值,进入子查询中,比较其where子句的条件“where f.sno=t.sno and f.cname=’计算机基础’”,符合则返回score成绩。

2、 返回父查询,判断父查询的where子句条件80<=返回的score,如果条件为true,则返回第1条记录。

3、 从父查询的student表中取出第2条数据,重复上述操作,直到所有父查询中的表中记录取完为止。

总结:

对比这两个查询的sql执行过程可以看出,相关子查询和非相关子查询的不同点在于,相关子查询依赖于父查询,父查询和子查询是有联系的,尤其在子查询的where语句中更是如此。明白了他们的执行过程,再去看相关子查询的代码,一下子就明白了。

非相关子查询和相关子查询执行过程详解相关推荐

  1. mysql查询解析过程_MySQL查询执行过程详解

    查询是用户通过设置某些查询条件,从表或其他查询中选取全部或者部分数据,以表的形式显示数据供用户浏览.查询是一个独立的.功能强大的.具有计算功能和条件检索功能的数据库对象.MySQL数据库中,MySQL ...

  2. 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)...

    不多说,直接上干货! 这个很简单,在集群机器里,选择就是了,本来自带就有Impala的. 扩展博客 给Ambari集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解) 欢迎大 ...

  3. SQL Server 聚集索引 clustered index 非聚集索引Nonclustered Indexes键查找查找Key Lookup执行计划过程详解

    SQL Server 聚集索引非聚集索引键查找过程详解 索引的相关术语 1 堆(Heap)是一种没有指定排序的数据结构,通俗的理解堆就像是按照顺序排放的杂物.在数据库里也即是对应没有聚集索引. 2 聚 ...

  4. mysql函数 用来查询匹配不到的数据_详解MySql基本查询、连接查询、子查询、正则表达查询...

    select * from STUDENT; 2.2.按条件查询 (1) 比较运算符 > , < ,= , != (< >),>= , <= select * fr ...

  5. SQL查询语句执行顺序详解

    查询操作是关系数据库中使用最为频繁的操作,也是构成其他SQL语句(如DELETE.UPDATE)的基础.当要删除或更新某些记录时,首先要查询出这些记录,然后再对其进行相应的SQL操作.因此基于SELE ...

  6. MongoDB查询性能分析—— explain 操作返回结果详解

    MongoDB 提供 db.collection.explain(), cursort.explain() 及 explain 命令获取查询计划及查询计划执行统计信息. explain 结果将查询计划 ...

  7. oracle对查询结果求和_Oracle 闪回技术详解

    概述 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成).需要注意的是,闪回技术旨在快速恢复 ...

  8. [转]Sql Server参数化查询之where in和like实现详解

    本文转自;http://www.cnblogs.com/lzrabbit/archive/2012/04/22/2465313.html 文章导读 拼SQL实现where in查询 使用CHARIND ...

  9. go mongodb排序查询_Kotlin与MongoDB整合CURD案例详解

    1.mongodb的低版本bson无法转换类型 比如MongoDB数据库表的字段类型为Decimal,实体类用String去定义就会报如下错误 No converter found capablof ...

最新文章

  1. 小米note3无线显示电脑连接服务器,小米note3如何连接电脑 小米note3连接电脑没反应怎么办...
  2. Halcon检测边缘——笔记
  3. 《京东技术解密》读书笔记:坚持技术十年如一日
  4. spring mvc logback
  5. [Python] Tkinter的食用方法_02_LabelFrame RadioButton CheckButton
  6. mysql 之 一个库中所有表复制到另一个数据库中的方法和工具
  7. python h5s文件 压缩_如何用python解压zip压缩文件
  8. 解读netty3.9的数据处理流程(一)
  9. VS C++ 控制台----暂停的方法
  10. linux下卸载grads,linux下安装grads
  11. windows下制作iso文件,WinMount介绍
  12. BlockChain的理解
  13. unity 陶瓷质感_Unity2D:简单自动瓷砖(Tile)的实现
  14. 11 Daemonset:忠实可靠的看门狗
  15. 如何配置一台以机器学习、深度学习为用途的工作站?
  16. 本科毕业设计(云计算、深度学习、Python)
  17. Python爬虫——12306网站车次信息
  18. 周鸿伟给创业者的建议
  19. 博弈论学习笔记(七)纳什均衡伯川德模型与选民投票
  20. 音频-DSD-Delta-Sigma

热门文章

  1. is not a class or namespace name解决方法
  2. web前端面试题(附答案)
  3. 【Docker】Docker 快速入门(精讲)
  4. 16QAM学习(一)串入并出的具体实现
  5. poweriso初用小记
  6. 2021-2027全球及中国3D网页设计服务行业研究及十四五规划分析报告
  7. 程序员2014年风水转运五大方法
  8. [.net 面向对象程序设计进阶] (27) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git...
  9. 苹果笔记本php好吗,苹果的笔记本好吗 你到底适不适合购买【图文】
  10. Codeforces Round #670(Div. 2) A,B,C,D,E