cross apply 和 outer apply

APPLY的执行过程:它先逻辑计算左表表达式,然后把右表达式应用到左表表达式的每一行。cross tb表都存在姓名的情况下才出现,outer tb外表存在的都显示。

create table #T(姓名 varchar(10))
insert into #T values('张三')
insert into #T values('李四')
insert into #T values(NULL )

create table #T2(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into #T2 values('张三' , '语文' , 74)
insert into #T2 values('张三' , '数学' , 83)
insert into #T2 values('张三' , '物理' , 93)
insert into #T2 values(NULL , '数学' , 50)

--drop table #T,#T2
go
select 
    * 
from 
    #T a
cross apply
    (select 课程,分数 from #T2 where 姓名=a.姓名) b

/*
姓名        课程        分数
---------- ---------- -----------
张三        语文        74
张三        数学        83
张三        物理        93

(3 行受影响)

*/
select 
    * 
from 
    #T a
outer apply
    (select 课程,分数 from #t2 where 姓名=a.姓名) b
/*
姓名        课程        分数
---------- ---------- -----------
张三        语文        74
张三        数学        83
张三        物理        93
李四        NULL       NULL
NULL       NULL       NULL
(5 行受影响)
*/

posted on 2012-03-02 23:48  Sanic  阅读(183)  评论(0编辑  收藏  举报

导航