Sql 交叉应用与外部应用相比

Sql 交叉应用与外部应用相比,sql,sql-server-2008-r2,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只返回外部表中应用函数返回结果集的行。OUTER返回外部表中的所有行。在

这些脚本给了我同样的结果

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只返回外部表中应用函数返回结果集的行。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)
外部应用是交叉应用

外部联接是内部联接

+1应用只是能够使用前面定义的列的联接。