in和exists的用法
1
in:
可以使用where id in(……)的方式,后面接的是一个查询结果,类似一个集合,例如select id…或者(1,2,3),返回的也是一个集合。exists:
可以使用where exists(……)或者and exists(……)的方式,只要括号里返回结果不为空,exists就返回true,否则为false。
这两个都是子查询,不过对于in,是先执行in子句,然后再和主查询链接,得到查询结果。
对于exists,先执行主查询,然后对每条查询记录,在exists中判断是否为true,如果是true则保留这条记录,否则舍弃这条数据,最后返回整个查询结果。
总结:对于主查询里的为表A,子查询里的表为B。当子查询表B小时,用in比较好,因为先执行B可以减少比较次数(这里可能不是很对,但大概就是这意思)。当主查询表A小时,用exists比较好。