<![endif]--> <![endif]-->
发现公司同事很喜欢用exists 和in 做子查询关联,我觉得很有必要研究下
两者的区别,供参考和备忘
/* (这段信息来自网络begin )对于in 的使用,就相当于对inner table 执行一个带distinct 的子查询,然后将得到的结果集再和outer table 进行外连接,连接方式和索引使用任然同于普通两表的连接(这段信息来自网络end )*/
对于网络的这段描述,我给予了测试,测试表为 liomuser.staff ,和liomuser.department ,这两张表都是小表,数量在1 万左右。
-- 例如:
select *
from liomuser.staff
where department_id in ( select department_id from liomuser.department);
-- 可以转换为
select a.*
from liomuser.staff a,
( select distinct department_id from liomuser.department) b
where a.department_id = b.department_id;
执行计划分别如下:
( 1 ) select *
from liomuser.staff
where department_id