OUTER APPLY 和 OUTER JOIN 之间有什么区别,何时使用它们?
What is the difference between OUTER APPLY and OUTER JOIN, and when to use each?
在SQL服务器中,Left JOIN和OUTER JOIN有什么区别?
本着欢迎新用户访问该站点的精神,我正在回答这个问题。
OUTER APPLY
可以实现 LEFT JOIN
可以做的任何事情——甚至更多。
JOIN
是关系数据库中的原始操作。这就是 SQL 的教学方式,有助于学习关于集合的思考——JOIN
通常与两个集合的笛卡尔积的某个子集相关。
APPLY
实现了技术上所谓的 "lateral join"。我将这些视为相关子查询的变体。本质上,这些是可以 return 多列和多行的相关子查询。
我对关系数据库的理解完全基于 JOIN
。在教学时SQL,我就是这样解释表之间的关系的。
也许有一天,APPLY
(或其他数据库中使用的LATERAL
)将成为SQL教学的默认方法。但是,我不认为 APPLY
有助于人们理解基于集合的思维,所以我更喜欢先学习和使用 JOIN
,然后在其他许多情况下使用 APPLY
有用。
首先,我真的不知道 T-SQL 中默认的 OUTER JOIN 是哪个(我打赌是 FULL),但无论如何,我认为不清楚 - 最好使用在需要时显式地加入 LEFT、RIGHT 或 FULL JOIN。
JOIN 加入 tables。已经存在的或子查询。
APPLY 在(左)table 的每一行中应用 (duh) table 值函数等效项。一些有趣的案例是:
- 应用现有的实际函数:CROSS/OUTER应用dbo.your_function_name
- 您可以使用不带 FROM 的 SELECT(某些字段)来为这些字段创建别名 - 这会使您的代码看起来整洁
- 您可以使用带有 FROM 的 SELECT 进行子查询。这与 join
相同
CROSS APPLY是INNER JOIN的超集,OUTER APPLY是LEFT的超集。您不能像 RIGHT 或 FULL 联接那样将函数应用于 nothing。
在SQL服务器中,Left JOIN和OUTER JOIN有什么区别?
本着欢迎新用户访问该站点的精神,我正在回答这个问题。
OUTER APPLY
可以实现 LEFT JOIN
可以做的任何事情——甚至更多。
JOIN
是关系数据库中的原始操作。这就是 SQL 的教学方式,有助于学习关于集合的思考——JOIN
通常与两个集合的笛卡尔积的某个子集相关。
APPLY
实现了技术上所谓的 "lateral join"。我将这些视为相关子查询的变体。本质上,这些是可以 return 多列和多行的相关子查询。
我对关系数据库的理解完全基于 JOIN
。在教学时SQL,我就是这样解释表之间的关系的。
也许有一天,APPLY
(或其他数据库中使用的LATERAL
)将成为SQL教学的默认方法。但是,我不认为 APPLY
有助于人们理解基于集合的思维,所以我更喜欢先学习和使用 JOIN
,然后在其他许多情况下使用 APPLY
有用。
首先,我真的不知道 T-SQL 中默认的 OUTER JOIN 是哪个(我打赌是 FULL),但无论如何,我认为不清楚 - 最好使用在需要时显式地加入 LEFT、RIGHT 或 FULL JOIN。
JOIN 加入 tables。已经存在的或子查询。
APPLY 在(左)table 的每一行中应用 (duh) table 值函数等效项。一些有趣的案例是:
- 应用现有的实际函数:CROSS/OUTER应用dbo.your_function_name
- 您可以使用不带 FROM 的 SELECT(某些字段)来为这些字段创建别名 - 这会使您的代码看起来整洁
- 您可以使用带有 FROM 的 SELECT 进行子查询。这与 join 相同
CROSS APPLY是INNER JOIN的超集,OUTER APPLY是LEFT的超集。您不能像 RIGHT 或 FULL 联接那样将函数应用于 nothing。