OUTER APPLY和OUTER JOIN有什么区别,以及何时使用它们?

时间:2018-08-23 12:16:42

标签: sql sql-server outer-join lateral-join

在SQL Server中,OUTER APPLY和OUTER JOIN有什么区别?我何时以及如何使用它们?

2 个答案:

答案 0 :(得分:5)

我本着欢迎新用户访问该网站的精神回答。

OUTER APPLY可以实现LEFT JOIN可以做的一切-甚至更多。

JOIN是关系数据库中的原始操作。这是SQL的教学方法,有助于学习关于集合的思维方式-JOIN通常与两个集合的笛卡尔积的某些子集相关。

APPLY实现了技术上所谓的“横向连接”。我将这些视为相关子查询的变体。从本质上讲,这些是相关的子查询,可以返回多于一列和多于一列。

我对关系数据库的理解牢固地立足于JOIN。在教授SQL时,这就是解释表之间关系的方式。

也许有一天,APPLY(或其他数据库中使用的LATERAL)将成为SQL教学的默认方法。但是,我不认为APPLY可以帮助人们理解基于集合的思维,因此我更喜欢先学习和使用JOIN,然后在许多其他情况下使用APPLY有用。

答案 1 :(得分:1)

首先,我真的不知道T-SQL中默认的OUTER JOIN是什么(我敢打赌FULL),但是无论如何,我认为还不清楚-最好使用LEFT,RIGHT或FULL在需要时明确加入。

JOIN连接表。已经存在的子查询或子查询。

APPLY在(左)表的每一行中应用(duh)一个表值函数等效项。一些有趣的情况是:

  1. 应用现有的实际功能:交叉/外部应用dbo.your_function_name
  2. 您可以使用不带FROM的SELECT(某些字段)来为字段创建别名-使您的代码看起来整洁
  3. 您可以将SELECT与FROM一起使用以进行子查询。这与联接相同

CROSS APPLY是INNER JOIN的超集,而OUTER APPLY是LEFT的超集。您无法像或“ FULL”联接那样将函数应用于 nothing