我们知道在sql中,in和exists都是用于子查询的,用来限定条件,它们使用当中到底有什么区别,什么场景该用in,什么场景该用exists呢?
In是把主查询中的表达式和子查询中的结果集进行比较,将匹配的数据返回。
Exists是先执行主查询第一行记录,然后执行exists中的子查询,只要子查询返回为true,外层查询将会将当前行包含在最终结果集当中,并继续处理主查询的下一行记录。
那什么情况用in,什么情况用exists呢?
In子句使用场景:
1.已知值列表:要查找的值是已知的,有具体值列表。
2.简单比较:对于某个字段简单比较,in更加直观。
3.小结果集:子查询返回数据量较小时,in表现良好。需要注意,in中数据不能大于1000条。
Exists子句使用场景:
1.复杂条件,检查的条件比较复杂,exists更灵活。
2.大结果集:返回结果集较大时,用exists更高效。
3.短路效应:需要尽快匹配到记录并停止搜索时,用exists。