【发布时间】:2019-01-29 19:45:46
【问题描述】:
在 SQL Server 中,Left 和 OUTER JOIN 有什么区别?
【问题讨论】:
标签: sql sql-server outer-join lateral-join
在 SQL Server 中,Left 和 OUTER JOIN 有什么区别?
【问题讨论】:
标签: sql sql-server outer-join lateral-join
我本着欢迎新用户访问该网站的精神回答这个问题。
OUTER APPLY 可以实现LEFT JOIN 可以做的任何事情——甚至更多。
JOIN 是关系数据库中的原始操作。它是 SQL 的教学方式,有助于学习如何从集合的角度进行思考——JOINs 通常与两个集合的笛卡尔积的某个子集相关。
APPLY 实现了技术上所谓的“横向连接”。我将这些视为相关子查询的变体。本质上,这些是可以返回多于一列和多于一行的相关子查询。
我对关系数据库的理解基于JOIN。在教 SQL 时,我会这样解释表之间的关系。
也许有一天,APPLY(或在其他数据库中使用的LATERAL)将成为教授 SQL 的默认方法。但是,我不认为APPLY 可以帮助人们理解基于集合的思维,所以我更喜欢先学习和使用JOIN,然后在其他许多有用的情况下使用APPLY。
【讨论】:
首先,我真的不知道 T-SQL 中哪个是默认的 OUTER JOIN(我敢打赌 FULL),但无论如何,我认为还不清楚 - 最好使用 LEFT、RIGHT 或 FULL需要时明确加入。
JOIN 连接表。已经存在的查询或子查询。
APPLY 在(左)表的每一行中应用(duh)一个表值函数等效项。一些有趣的案例是:
CROSS APPLY 是 INNER JOIN 的超集,OUTER APPLY 是 LEFT 的超集。您不能将函数应用于 nothing,就像 RIGHT 或 FULL 连接一样。
【讨论】:
outer join(据我所知在任何数据库中)。 cross apply 和 outer apply 不等价于任何连接。它们是功能的超集。