4

操作员APPLY不是我有任何使用经验的操作员,我担心我会错过某些可能性。

Alexander Kuznetsov 的这篇文章给出了一个很好的例子

在亚历山大的例子中,他用来APPLY加入函数的返回 - 是否有其他情况APPLYCROSS或者OUTER应该是我使用的第一件事?

4

3 回答 3

2

APPLY可以加入任意结果集。TOP 1我发现通过一些排序返回行特别有用:

select *
from T
cross apply (
 select top 1 * from T2 order by DateTime desc
) x

APPLY可以做任何加入可以和更多。但它不能使用连接提示。

基本上,如果一个连接就足够了,你想使用一个连接。如果您需要更多,请使用 apply,因为它使用起来有点麻烦。

于 2012-09-29T13:33:04.807 回答
2

APPLY 是一个逐行运算符,它允许您APPLY将先前表的每一行用于函数或子查询。因此,它在以下情况下非常有用

  1. 您需要 A 中每条记录中 B 的最新/最大/最小记录
  2. 您需要对 A 中的每条记录运行表值函数

是的,它可以替代 JOIN,但它会在正常 JOIN 可以工作的地方表现得非常糟糕,因为您强制 SQL Server 使用逐行运算符而不是基于集合的 JOIN。

CROSS APPLY 和 OUTER APPLY 的区别与 INNER JOIN 和 OUTER JOIN 的区别一样。基本上,如果应用它的函数/子查询返回 0 条记录,则 CROSS APPLY 将删除源记录。OUTER APPLY 保留源记录。

阅读更多:使用应用 (msdn)

于 2012-09-29T13:44:07.847 回答
0

基本上连接用于组合两个结果集,但 CROSS APPLY 的行为类似于循环,它获取外部表结果,然后将每一行作为参数传递给驱动表或表值函数以生成结果集。Apply CROSS APPLY 和 OUTER APPLY 有两种形式。CROSS APPLY t 只返回与驱动表或表值函数匹配的行,并且 OUTER APPLY 结果所有外部表记录和驱动表匹配尽量避免使用 apply,因为它的慢查询然后连接

于 2012-09-30T16:16:57.180 回答