Sql Server中不常用的表运算符之APPLY(1)
写在这个系列的前面:
就像他们的名字一样,作为一个表运算,他们用来运算左表和右表。JOIN也是一个表运算符,不过他太常用了。
APPLY:
将右表表达式应用在左表的每一行上。
APPLY是Sql2005对SQL语句的拓展,这意味着其他类型的数据库可能不支持这个表运算符。微软设计APPLY的初衷在于将表值函数运用在左表的每一行,并将结果与对应行关联起来。
网上大多数文章中提到的也是这样的用法,例如我们有一个Split(s,splitChar)表值函数,可以将一个字符串s用splitChar分割,返回分割后的表。
现在有这样一张表:dbo.ApplyCase1
| s |
| swer,23,wer,234 |
| wer,wer,234 |
下面这个查询将会把Split这个表值函数(右表表达式)运用在dbo.ApplyCase1(左表表达式)中的每一行上,并把结果与对应行关联。
SELECT s,ct.strValue FROM dbo.ApplyCase1 AS ac CROSS APPLY dbo.Split(s,',') ct WHERE ct.strValue<>ac.s
where 可以无视,主要是为了与INNER JOIN相比较。结果如下
| s | strValue |
| swer,23,wer,234 | swer |
| swer,23,wer,234 | 23 |
| swer,23,wer,234 | wer |
| swer,23,wer,234 | 234 |
| wer,wer,234 | wer |
| wer,wer,234 | wer |
| wer,wer,234 | 234 |
这里可以看出APLLY的两个特点
1.将右表表达式应用在左表的每一行上。
2.右表表达式可以使用左表中的列。
假如我们换成如下查询则会报错
SELECT s,ct.strValue FROM dbo.ApplyCase1 AS ac INNER JOIN dbo.Split(s,',') ct ON ct.strValue<>ac.s
错误如下
Msg 207, Level 16, State 1, Line 1
Invalid column name 's'.
因为INNER JOIN无法直接使用左表的列,而只能在ON过滤中通过比较来建立左表和右表的联系。
Sql Server中不常用的表运算符之APPLY(1)的更多相关文章
- Sql Server中不常用的表运算符之APPLY(2)
在Sql Server中不常用的表运算符之APPLY(1)中提到,SQL2005中新支持的APPLY的特性:1.可以直接将表表达式(表值函数或者子查询)作为APPLY语句的右表连接左表.2.由于使用A ...
- Sql Server中不常用的表运算符之UNPIVOT
在Sql Server中不常用的表运算符之PIVOT中,介绍了PIVOT表运算符,现在来说说与之相对应的另一个表运算符UNPIVOT. 从名字可以看出,这个运算符的作用与PIVOT刚好相反,是将一行的 ...
- Sql Server中不常用的表运算符之PIVOT
PIVOT是SQL Server2005新添加的一个表运算符,作用在于将行转为列. 先来看看他的基本语法: 来自http://technet.microsoft.com/zh-cn/library/m ...
- SQL Server中,常用的全局变量
在SQL Server中,全局变量是一种特殊类型的变量,服务器将维护这些变量的值.全局变量以@@前缀开头,不必进行声明,它们属于系统定义的函数.下表就是SQL Server中一些常用的全局变量. 全局 ...
- SQL Server中查询数据库及表的信息语句
/* -- 本文件主要是汇总了 Microsoft SQL Server 中有关数据库与表的相关信息查询语句. -- 下面的查询语句中一般给出两种查询方法, -- A方法访问系统表,适应于SQL 20 ...
- SQL Server中的临时表和表变量
SQL Server中的临时表和表变量 作者:DrillChina出处:blog2008-07-08 10:05 在SQL Server的性能调优中,有一个不可比拟的问题:那就是如何在一段需要长时间的 ...
- sql Server中临时表与数据表的区别
sql server 中临时表与数据表的区别 1.如何判断临时表和数据表已生成 --如何判断临时表是否已创建--- if exists(select * from tempdb..sysobjects ...
- 转:Sql Server中清空所有数据表中的记录
如果要删除数据表中所有数据只要遍历一下数据库再删除就可以了,清除所有数据我们可以使用搜索出所有表名,构造为一条SQL语句进行清除了,这里我一一给各位同学介绍. 使用sql删除数据库中所有表是不难的 ...
- Sql Server中清空所有数据表中的记录
Sql Server中清空所有数据表中的记录 清空所有数据表中的记录: 代码如下:exec sp_msforeachtable @Command1 ='truncate table ?'删除所有数据 ...
随机推荐
- C# 随机红包算法
static void Main(string[] args) { ; ; double minAmount = 0.01; Random r = new Random(); ; i < num ...
- 使用PowerDesigner把oom设计图导出jpg格式的图片
1: 按住Shift键点击鼠标选择要导出的对象,必须先选择. 2: 选择Edit—>Export Image 到出你需要的格式,如下图
- HBase工程师线上工作经验总结----HBase常见问题及分析
阅读本文可以带着下面问题:1.HBase遇到问题,可以从几方面解决问题?2.HBase个别请求为什么很慢?你认为是什么原因?3.客户端读写请求为什么大量出错?该从哪方面来分析?4.大量服务端excep ...
- git和github使用方式
git 和github github是远程管理代码的服务器的名称 git代码管理系统 (git既然是一个系统,所以说git也有一些命令) git操作过程 首先在本地建立一个仓库,用来把代码提交到git ...
- android studio 使用ndk编译.C文件生成so文件
task buildSo(type: Exec) { //windows commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePat ...
- [AS3.0] NetConnection.Connect.Rejected 解决办法
以下是运用FMS录制视频的一段代码: package { import flash.display.Sprite; import flash.events.AsyncErrorEvent; impor ...
- [SQL]Sql转至问题
HRMS Name InsuranceMoney InsuranceName -------------------- -------------------- ------------------- ...
- 2、NASA HS3(Hurricane AND Server Storm Sentinel)
国内访问不到,但是通过ppt可以看到,数据支撑做的很到位,前台展示很炫. 气象领域WebGL应用最好案例的当之无愧啊.这篇全部贴图了. 来自为知笔记(Wiz)
- CentOS linux下安装和配置Apache+SVN(用浏览器http方式访问SVN目录)
在CentOS linux下安装SVN,我们可以进行以下步骤: 第一步:安装CentOS Linux操作系统,并在CentOS安装进行的同时,自定义安装这一步,一定要勾选Subversion(在“开发 ...
- mount什么意思
root@Home-Cloud:/mnt# dfFilesystem 1K-blocks Used Available Use% Mounted on/dev/root ...