首页 > 代码库 > exist & in
exist & in
select a.* from A a
where exists ( select 1 from B b where a.id=b.id )
1 public List exist(){ 2 List result; 3 Array A=(select * from A) 4 5 for(int i=0; i<A.length; i++) { 6 if(exists(A[i].id) { //执行select 1 from B b where b.id=a.id是否有记录返回 7 result.add(A[i]); 8 } 9 }10 return result;11 }
2.in
select * from A
where id in ( select id from B )
1 public List in(){ 2 List result; 3 Array A = (select * from A); 4 Array B = (select id from B); 5 6 for(int i=0; i<A.length; i++) { 7 for(int j=0; j<B.length; j++) { 8 if(A[i].id == B[j].id) { 9 result.add(A[i]);10 break;11 }12 }13 }14 return result; 15 }
A表10000条记录,B表1000000条记录,那么最多有可能遍历10000*1000000次,效率很差.
A表10000条记录,B表100条记录,那么最多有可能遍历10000*100次,遍历次数大大减少
结论:
子查询表大的用exists,子查询表小的用in
3. in与 =
select name from student where name in (‘zhang‘,‘wang‘,‘li‘,‘zhao‘);
select name from student where name=‘zhang‘ or name=‘li‘ or name=‘wang‘ or name=‘zhao‘;
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。