select * from 表A where exists(select * from 表B where 表B.id=表A.id)
这句相当于
select * from 表A where id in (select id from 表B)
对于表A的每一条数据,都执行select * from 表B where 表B.id=表A.id的存在
性判断,如果表B中存在表A当前行相同的id,则exists为真,该行显示,否则不显示
区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,,那么先执行子查询
IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况