前段时间有一个相关子查询的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表中找到该学号学生的其他基本信息。
相关子查询
所谓相关子查询,是指求解相关子查询不能像求解普通子查询那样,一次将子查询求解出来,然后求解父查询。相关子查询的内层查询由于与外层查询有关,因此必须反复求值。