高级T-SQL进阶系列 上篇:使用 APPLY操作符

Posted 钱行慕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高级T-SQL进阶系列 上篇:使用 APPLY操作符相关的知识,希望对你有一定的参考价值。

使用OUTER APPLY 操作符

 

OUTER APPLY操作符工作起来和CROSS APPLY比较类似。唯一的不同在于OUTER APPLY操作符对于那些从表值函数不返回任何数据行的列仍旧会返回结果集。为了看其是如何工作的我们可以查看列表3的代码。

USE tempdb;
GO
SELECT  *
FROM    dbo.SearchString AS S
        OUTER APPLY dbo.FindProductLike(S.String);

  列表3:OUTER APPLY示例

 当我运行列表3的代码,将得到报告2的输出结果。

ID    String           ProductName                Price
----- ---------------- -------------------------- ---------
1     Red              Red Santa Suit             199.99
1     Red              Red Bells                  49.99
2     Lights           LED Lights                 6.99
3     Star             NULL                       NULL

  报告2:通过运行列表3的代码产生的输出

通过使用OUTER APPLY操作符,你可以看到对于字符串值“Star”,存在一个数据行,其ProductName列和Price列均为Null值。这是因为SearchString表的字符串值“Star”并没有发现是Product表的任何ProductName列的一部分。当表值函数dbo.FindProductLike使用了列值而返回了一个空的数据行集时,SQL SERVER便会对表值函数产生的数据列赋以null值。OUTER APPLY操作符的这个功能类似与当在两个表之间使用OUTER JOIN而并没有匹配行的情形。当一个字符串传递给表值函数dbo.FindProductLike并确实返回数据行时,那么SearchString表的数据行便会与表值函数的结果进行关联,如果一个CROSS APPLY操作符被使用的时候发生的一样。

使用一个表值表达式

 

以上是关于高级T-SQL进阶系列 上篇:使用 APPLY操作符的主要内容,如果未能解决你的问题,请参考以下文章

译高级T-SQL进阶系列 上篇:理解公共表表达式(CTEs)

高级T-SQL进阶系列 下篇:使用 CROSS JOIN 介绍高级T-SQL

高级T-SQL第1级的阶梯:使用交叉连接来引入高级T-SQL

T-SQL进阶02.理解SQL查询的底层原理

SQL进阶03.执行计划之旅1 - 初探

T-SQL的进阶:超越基本级别3:构建相关子查询——701小组