sqlnotin没有结果
❶ sql 中的 in 与 not in、exists 与 not exists 的区别以及性能分析
SQL中,in和exists,以及not in和not exists在使用上有显着的区别,并且性能受到表大小和查询条件的影响。
1. 对于in和exists:
in通常通过hash连接操作,效率取决于两个表的大小,当表相当时,两者性能相近。如果子查询表大,用exists;反之,子查询表小,用in。如表A(小表)与表B(大表)的查询。
2. not in与not exists:
not in与逻辑上的not exists不完全等同,误用可能导致错误。not in通常全表扫描,效率较低,除非子查询字段有非空限制。not exists则利用关联子查询,可以利用索引,无论表大小都更优。
3. in与=的区别:
两者在某些情况下结果相同,但in更强调集合匹配,而=则更为精确。
4. EXISTS的性能分析:
当子查询结果集小,主表大且有索引时,in效率更高。反之,主表小、子表大且有索引时,exists更优。
5. NOT IN与NOT EXISTS:
两者在某些需求下不能互换,NOT EXISTS通常更推荐,尤其是在基于成本的优化中。具体使用取决于主查询和子查询的大小及字段约束。
总结来说,in和exists的选择基于内外表的大小和索引,而not in和not exists则要考虑字段约束和性能优化。优化SQL时,需根据实际场景灵活运用,没有绝对的效率高低,应根据具体情况进行调整。
❷ sql NOT IN查询问题
有两个以上的关键字还是用NOT EXISTS更方便一些:
select a.* from a where not EXISTS (select * from b where (a.id=B.ID OR A.ID1=B.ID1) AND 您的其它不进结果的关联条件 )
❸ sql not in查询问题
换成左外连接能快很多
select top (@size) T.*
from table_1000000 T left outer join (select top ((@page-1)*@size) ID from table_1000000 order by ID asc) R on T.ID=R.ID
where R.ID is null
order by ID asc
❹ 关于SQL语句not in不执行
子查询和主查询的条件不一致。也就是说子查询里查询出来的结果可能和主查询的第一个结果并不一样。仔细看看你的语句,主查询里有tj=2,而子查询里却是全部记录。例如在下面这个情况下,你就得不到你想要的结果:
id name tj
0 a 1
1 b 1
2 c 2
3 d 2
你的主查询返回的是id为2和3的两条记录,但子查询却返回了所有记录,因此id为2的这条记录(在主查询中是第有条)并不能被筛选掉。