Oracle的子查询分为两种:一种是相关子查询,一种是非相关子查询。主要区别就是相关子查询用到了外查询结果的字段。一般来说,相关子查询不能单独运行,非相关子查询可以单独运行。
相关子查询的计算步骤:
扫描外查询的第一条记录
扫描子查询,并将第一条记录的对应值传给子查询,由此计算出子查询的结果
根据子查询的结果,返回外查询的结果。
重复上述动作,开始扫描外查询的第二条记录,第三条记录,直至全部扫描完毕
- 相关子查询
select * from t1 where (select id from t2 where t2.cis = t1.cis)
- 非相关子查询
select * from t1 where cis in (select cis from t2)