联合相关查询如何运作?内部查询是否根据外部查询行进行迭代?假设我的学生表只有1个ID列,其中的值为1,2,3。任何正文都可以给出图片示例吗?
select count(*)
from student s where s.sid < any (select s1.id from student s1 where s1.id < s.id);
答案 0 :(得分:0)
相关子查询(理论上 - 不考虑可能的优化)对主表的每一行执行一次。
对于s.ID = 1,子查询不返回任何行(s1.ID&lt; 1不返回任何内容)
对于s.ID = 2,它返回1和(谓词s1.id&lt; 2)
对于s.ID = 3,它返回1,2
因此未选择第一行(s.ID = 1)(子查询返回无行),
对于第二行(s.ID = 2),谓词为s.id < any ( 1 )
,将其重写为s.id < 1
,请参阅ANY的规则
并且该行未被选择为2&lt; 1为FALSE
对于第三行(s.ID = 3),谓词为s.id < any ( 1,2 )
,它被重写为s.id < 1 OR s.id < 2
,也是FLASE。
所以查询
create table student as
select rownum id from dual connect by level <= 3;
select *
from student s where s.id < any (select s1.id from student s1 where s1.id < s.id);
返回空结果(无行)。