研究exists 这个函数,并不感觉一辈子也用不上,有时候其实就在不经意间就需要了!
exists 用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False
exists 指定一个子查询,检测 行 的存在。通常使用exists来做什么呢?可以使用exists来判断数据的存在与否,再进一步操作,而insert if not exists 可以用在不允许重复插入数据的地方。
通常使用情况会是两个表之间相互有关联,比如A表的某个字段是B表的某个字段,A表的某些内容会根据B表变动等。
并且和它相近的 in 函数也是有这样的作用,它们之间的区别就是 :
in 是做外表和内表通过hash 连接,先查询子表,再查询主表,不管子查询是否有数据,都对子查询进行全部匹配。
exists是外表做loop 循环,先主查询,再子查询,然后去子查询中匹配,如果匹配到就退出子查询返回true,将结果放到结果集。
select * from 外表 a where id i n(select 相关id from 内表) in的执行类似如下:
List resultSet=[];
Array A=(select * from A);
Array B=(select id from B);
for(int i=0;i<A.length;i++) {
for(i