1.CROSSAPPLYOUTERAPPLY

MSDN解释如下(个人理解不是很清晰):

使用APPLY运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。表值函数作为右输入,外部表表达式作为左输入。通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出。APPLY运算符生成的列的列表是左输入中的列集,后跟右输入返回的列的列表。

APPLY有两种形式:CROSSAPPLYOUTERAPPLYCROSSAPPLY仅返回外部表中通过表值函数生成结果集的行。OUTERAPPLY既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为NULL

网上搜集的解释如下(个人感觉好理解):

SQLServer数据库操作中,在2005以上的版本新增加了一个APPLY表运算符的功能。新增的APPLY表运算符把右表表达式应用到左表表达式中的每一行。它不像JOIN那样先计算哪个表表达式都可以,APPLY必须先逻辑地计算左表达式。这种计算输入的逻辑顺序允许把右表达式关联到左表表达式。

APPLY有两种形式,一个是OUTERAPPLY,一个是CROSSAPPLY,区别在于指定OUTER,意味着结果集中将包含使右表表达式为空的左表表达式中的行,而指定CROSS,则相反,结果集中不包含使右表表达式为空的左表表达式中的行

注意:若要使用APPLY,数据库兼容级别必须为90

下面我们做个例子:

比如有个类别表(Category)内容如下:

还有个类别明细表(CategoryDetail)内容如下:

下面我们来看看OUTERAPPLY的查询结果:

1 SELECT  *
2 FROM    dbo.Category a
3         OUTER APPLY ( SELECT    *
4                       FROM      dbo.CategoryDetail b
5                       WHERE     b.CategoryId = a.Id
6                     ) AS c ;

更多相关文章

  1. 使用带有派生列的SQL排名函数
  2. 数据库截取字符串SUBSTR函数的使用
  3. SQL Server CLR函数类型不匹配。
  4. mysql中MAX()函数MIN()函数
  5. MySQL 中的函数(一:数学函数)
  6. SQL Server 2008使用sproc中的函数
  7. MYSQL存储过程,函数,光标
  8. 请问mysql中有没有类似math.max(1,2)这种可以比较两个值中最大值
  9. SQL 函数如何设置参数默认值

随机推荐

  1. [置顶] 《Android 之美 从0到1 -- 高手之
  2. 谷歌 Android“开源“神话走向破灭
  3. android中异步加载网络图片
  4. Cheatsheet: 2012 10.01 ~ 10.07
  5. Android(安卓)SDK的默认目录导致的AVD启
  6. 关于Android 版本向下兼容
  7. 适用于Android的OpenSL ES指南-OpenSL ES
  8. android蓝牙BLE(四) —— 实战
  9. Android中Javascript中的调用
  10. Android学习之路(二)之 我的第一个Android