这些脚本给了我相同的结果
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 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
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