【问题标题】: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 有什么区别?

【问题讨论】:

    标签: sql sql-server outer-join lateral-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)一个表值函数等效项。一些有趣的案例是:

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

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

      【讨论】:

      • 啊。没有默认的outer join(据我所知在任何数据库中)。 cross applyouter apply等价于任何连接。它们是功能的超集。
      • 我同意,所以我会编辑,虽然我觉得等价更简单
      猜你喜欢
      • 2010-09-07
      • 2011-03-14
      • 2013-10-16
      • 2018-02-09
      • 2016-08-28
      • 2013-03-10
      • 1970-01-01
      相关资源
      最近更新 更多