这些脚本给我相同的结果
SELECT * FROM
(select x = null) x
OUTER APPLY
(select x = 1) y
SELECT * FROM
(select x = null) x
CROSS APPLY
(select x = 1) y
< p >CROSS APPLY和OUTER APPLY是相同的吗?
是否有一个例子说明它们返回不同的结果的情况?
这些脚本给我相同的结果
SELECT * FROM
(select x = null) x
OUTER APPLY
(select x = 1) y
SELECT * FROM
(select x = null) x
CROSS APPLY
(select x = 1) y
< p >CROSS APPLY和OUTER APPLY是相同的吗?
是否有一个例子说明它们返回不同的结果的情况?
使用INNER JOIN(用于CROSS)和LEFT JOIN(用于OUTER)来使区别更易于理解。CROSS仅返回外部表中应用函数返回结果集的行。OUTER返回外部表中的所有行。
这里有一种情况,它们不会返回相同的结果。顺便说一下,只有在需要将先前的表格/子查询与下一个表格/子查询相关联时才使用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 APPLY相当于CROSS APPLY的外部连接,就像OUTER JOIN相当于INNER JOIN。