CROSS APPLY与OUTER APPLY相比

时间:2012-09-28 21:28:04

标签: sql sql-server-2008-r2

这些脚本给我相同的结果

SELECT * FROM
(select x = null) x
OUTER APPLY
(select x = 1) y  

SELECT * FROM
(select x = null) x
CROSS APPLY
(select x = 1) y

CROSS APPLYOUTER APPLY是否相同?

是否有一个他们没有返回相同结果的情况的例子?

2 个答案:

答案 0 :(得分:10)

考虑INNER JOIN(用于CROSS)和LEFT JOIN(用于OUTER)以使区分更容易理解。 CROSS仅返回外部表中应用函数返回结果集的行。 OUTER返回外部表中的所有行。

答案 1 :(得分:5)

这是他们不会返回相同结果的情况。顺便提一下,当您需要将先前的表/子查询与下一个表/子查询关联时,您只使用APPLY。

     SELECT x.x, y.x y
       FROM (select [x] = 1) x
OUTER APPLY (select [x] = 1 where x.x is null) y  

-- result
1, null

     SELECT x.x, y.x y
       FROM (select [x] = 1) x
CROSS APPLY (select [x] = 1 where x.x is null) y

-- result
(empty result set)

外部申请是交叉申请什么
OUTER JOIN是INNER JOIN