dot*_*ner 6 sql sql-server join exists cross-apply
我读过,CROSS APPLY就像JOIN ..我认为JOIN也可以用EXISTS完成(相关子查询)
我很困惑,使用CROSS APPLY和EXISTS有什么区别?
什么时候应该去交叉申请反对EXISTS?
CROSS APPLY不仅仅是一个JOIN.JOIN在两组数据之间找到匹配(或不匹配)的行.CROSS APPLY是一种针对您正在应用它的事物的每一行运行查询的方法.这可以作为一种过滤机制,类似于JOIN如何工作,但是它在每一行都应用了一些东西,因此需要考虑这种方式.
子查询中的EXISTS是一种完全不同的过滤机制.这是一种快速识别的方法,因为它会在找到某些东西时立即使其搜索短路.一般来说,您希望使用EXISTS的地方是您可能会对过滤条件产生影响,从而使搜索尽可能短.但是,EXISTS找不到所有匹配项.它只找到第一个匹配,然后停止搜索.
因此,虽然您可以从这三种不同的方法得到相同的结果,但按照定义使用它们,您通常是正确的.如果你真的在加入两组数据,请使用JOIN.如果要对数据集中的每一行运行进程(通常是过滤器),请使用CROSS APPLY.如果您想要对可能的正匹配进行快速过滤,请使用EXISTS.