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 行受影响) */