博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sql Server中不常用的表运算符之APPLY(1)
阅读量:6603 次
发布时间:2019-06-24

本文共 996 字,大约阅读时间需要 3 分钟。

写在这个系列的前面:

就像他们的名字一样,作为一个表运算,他们用来运算左表和右表。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 1Invalid column name 's'.

因为INNER JOIN无法直接使用左表的列,而只能在ON过滤中通过比较来建立左表和右表的联系。

 

转载于:https://www.cnblogs.com/iiaijimaai/p/3604254.html

你可能感兴趣的文章
【SICP练习】151 练习4.7
查看>>
MySQL高可用架构之Keepalived+主从架构部署
查看>>
如何在分组时,连接多个行数据
查看>>
Codeforces 1149 B - Three Religions
查看>>
js中的scrollTop、offsetTop、clientTop
查看>>
11-border(边框)
查看>>
4.字符串(2-6/2-7)
查看>>
bugfree3.0.1-邮件配置
查看>>
ASP.Net MVC View(视图)
查看>>
有关git clone 下载速度变慢的解决方法
查看>>
Papervision3D Essentials中文版,附Papervision3D_2.1.920.swc和章节练习源码
查看>>
Mysql汉字乱码的解决
查看>>
FMDB增删改查小Demo
查看>>
UNIX网络编程卷2 源码编译篇
查看>>
(一)认识Sass和Compass
查看>>
哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)C - 小明打联盟...
查看>>
POJ 1930 Dead Fraction
查看>>
PAT (Advanced Level) 1028. List Sorting (25)
查看>>
获取oracle数据库对象定义
查看>>
【摘】人生苦短, 每日python
查看>>