Oracle co相关查询?

时间:2017-04-03 15:42:57

标签: oracle

联合相关查询如何运作?内部查询是否根据外部查询行进行迭代?假设我的学生表只有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);  

1 个答案:

答案 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);

返回空结果(无行)