CROSS APPLY 和outer apply 的区别:
DECLARE @t table (姓名 varchar ( 10 ))
insert into @T values ( ' 张三 ' )
insert into @T values ( ' 李四 ' )
insert into @T values ( ' 王二 ' )
insert into @T values ( NULL )
DECLARE @T2 table (姓名 varchar ( 10 ) , 课程 varchar ( 10 ) , 分数 int )
insert into @T2 values ( ' 张三 ' , ' 语文 ' , 74 )
insert into @T2 values ( ' 张三 ' , ' 数学 ' , 83 )
insert into @T2 values ( ' 张三 ' , ' 物理 ' , 93 )
insert into @T2 values ( ' 李四 ' , ' 物理 ' , 91 )
insert into @T2 values ( NULL , ' 数学 ' , 50 )
select * from @T a
cross apply
( select 课程,分数 from @t2 where 姓名 = a.姓名) b
/*
姓名 课程 分数
---------- ---------- -----------
张三 语文 74
张三 数学 83
张三 物理 93
李四 物理 91
(4 行受影响)
*/
select
*
from
@T a
outer apply
( select 课程,分数 from @t2 where 姓名 = a.姓名) b
/*
姓名 课程 分数
---------- ---------- -----------
张三 语文 74
张三 数学 83
张三 物理 93
李四 物理 91
王二 NULL NULL
NULL NULL NULL
(6 行受影响)