OUTER APPLY 和 OUTER JOIN 有啥区别,何时使用它们? [关闭]

Posted

技术标签:

【中文标题】OUTER APPLY 和 OUTER JOIN 有啥区别,何时使用它们? [关闭]【英文标题】:What is the difference between OUTER APPLY and OUTER JOIN, and when to use each? [closed]OUTER APPLY 和 OUTER JOIN 有什么区别,何时使用它们? [关闭] 【发布时间】:2019-01-29 19:45:46 【问题描述】:

在 SQL Server 中,Left 和 OUTER JOIN 有什么区别?

【问题讨论】:

【参考方案1】:

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

OUTER APPLY 可以实现LEFT JOIN 可以做的任何事情——甚至更多。

JOIN 是关系数据库中的原始操作。它是 SQL 的教学方式,有助于学习如何从集合的角度进行思考——JOINs 通常与两个集合的笛卡尔积的某个子集相关。

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

我对关系数据库的理解基于JOIN。在教 SQL 时,我会这样解释表之间的关系。

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

【讨论】:

【参考方案2】:

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

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

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

    应用现有的实际函数:CROSS/OUTER APPLY dbo.your_function_name 您可以使用不带 FROM 的 SELECT(某些字段)来为字段创建别名 - 这会使您的代码看起来整洁 您可以使用带有 FROM 的 SELECT 来创建子查询。这和join是一样的

CROSS APPLY 是 INNER JOIN 的超集,OUTER APPLY 是 LEFT 的超集。您不能将函数应用于 nothing,就像 RIGHT 或 FULL 连接一样。

【讨论】:

啊。没有默认的outer join(据我所知在任何数据库中)。 cross applyouter apply等价于任何连接。它们是功能的超集。 我同意,所以我会编辑,虽然我觉得等价更简单

以上是关于OUTER APPLY 和 OUTER JOIN 有啥区别,何时使用它们? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

CROSS APPLY和 OUTER APPLY 区别详解

CROSS APPLY和 OUTER APPLY 区别详解

CROSS APPLY 和 OUTER APPLY 区别

SQL 关于apply的两种形式cross apply 和 outer apply

inner join 和outer join的区别

SQL中inner join,outer join和cross join的区别