Sql Server中不经常使用的表运算符之APPLY(1)

写在这个系列的前面:数据库

就像他们的名字同样,做为一个表运算,他们用来运算左表和右表。JOIN也是一个表运算符,不过他太经常使用了。函数

 

APPLY:spa

将右表表达式应用在左表的每一行上。设计

APPLY是Sql2005对SQL语句的拓展,这意味着其余类型的数据库可能不支持这个表运算符。微软设计APPLY的初衷在于将表值函数运用在左表的每一行,并将结果与对应行关联起来。code

网上大多数文章中提到的也是这样的用法,例如咱们有一个Split(s,splitChar)表值函数,能够将一个字符串s用splitChar分割,返回分割后的表。blog

如今有这样一张表:dbo.ApplyCase1字符串

s
swer,23,wer,234
wer,wer,234

 

 

 

下面这个查询将会把Split这个表值函数(右表表达式)运用在dbo.ApplyCase1(左表表达式)中的每一行上,并把结果与对应行关联。it

SELECT s,ct.strValue FROM dbo.ApplyCase1 AS ac CROSS APPLY dbo.Split(s,',') ct WHERE  ct.strValue<>ac.s

where 能够无视,主要是为了与INNER JOIN相比较。结果以下table

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的两个特色class

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过滤中经过比较来创建左表和右表的联系。

相关文章
相关标签/搜索