阅文时长 | | 1.26分钟 | 字数统计 | | 2027.2字符 |
主要内容 | | 1、引言&背景 2、官方定义&示例 3、CROSS APPLY和CROSS JOIN是等价的吗?如果不等价的话,区别在哪里? 4、声明与参考资料 | ||
『MSSQL·APPLY关键字的学习理解』 | |||
编写人 | | SCscHero | 编写时间 | | 2021/8/19 PM9:9 |
文章类型 | | 系列 | 完成度 | | 已完成 |
座右铭 | 每一个伟大的事业,都有一个微不足道的开始。 |
笛卡尔积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。通俗理解的话博主可以举个例子,例如有两个集合,一个有Y个元素,一个有X个元素,那么他们的笛卡尔积就是X × Y个元素。
The Crossjoin function returns the cross product of two or more specified sets. The order of tuples in the resulting set depends on the order of the sets to be joined and the order of their members. For example, when the first set consists of {x1, x2,...,xn}, and the second set consists of {y1, y2, ..., yn}, the cross product of these sets is:
----来自《微软英文文档·Crossjoin (MDX)》[1]
{(x1, y1), (x1, y2),...,(x1, yn), (x2, y1), (x2, y2),...,
(x2, yn),..., (xn, y1), (xn, y2),..., (xn, yn)}
APPLY运算符的左操作数和右操作数都是表表达式。这些操作数之间的主要区别是,right_table_source可以使用表值函数,该函数可从left_table_source获取一个列作为函数的参数之一。left_table_source可以包括表值函数,但不能以来自 right_table_source的列作为参数。
----来自《微软中文文档·使用Apply》[2]
APPLY运算符通过以下方式工作,以便为FROM子句生成表源:
针对left_table_source的每一行计算right_table_source以生成行集。
right_table_source中的值取决于left_table_source。right_table_source可以按以下方式近似表示:TVF(left_table_source.row),其中,TVF是表值函数。
通过执行UNION ALL操作,将计算right_table_source的值时为每行生成的结果集与left_table_source组合起来。
APPLY运算符的结果生成的列的列表是来自left_table_source(与来自right_table_source的列的列表相组合)的一组列。
不等价情况:CROSS JOIN和CROSS APPLY语法结构上的不同。例如CROSS JOIN带上条件会报错。
微软中文文档·FROM 子句以及 JOIN、APPLY、PIVOT (Transact-SQL)
原创博文,未经许可请勿转载。
如有帮助,欢迎点赞、收藏、关注。如有问题,请评论留言!如需与博主联系的,直接博客私信SCscHero即可。
微软英文文档·Crossjoin (MDX) ↩︎
微软中文文档·使用Apply ↩︎