CROSS APPLY OUTER APPLY 关键字简介


一、cross apply outer apply 关键字功能简介

1.1 cross apply outer apply 可应用两张表或多张表之间的连接,
是对两张表或多张表进行笛卡尔积运算
1.2 cross apply outer apply 在做笛卡尔积运算时,如果使用表值函数,可以将其它表的列作为参数放入表值函数中进行相关运算再做笛卡尔积

cross apply 与outer apply 的区分为:
cross apply:如果表值函数无返回行时,此时表参数所在行不会进行笛卡尔运算也不会显示出表参数行
outer apply:如果表值函数无返回行时,此时会返回表参数所在行数据,其它字段均返回null


二、cross apply outer apply 举例应用

/*创建表 并插入数据*/
create table A (keyId1 int,info1 varchar(10))
create table B (keyId2 int,info2 varchar(10))
go
insert into A values(1,'a'),(2,'b')
insert into B values(10,'a-a'),(20,'b-b'),(30,'c-c'),(null,null)
go

/*创建表值函数*/
create function fn_bkTb(@keyIdP int)
returns @t table(keyId int ,info varchar(10))
as
begin

if @keyIdP =1
begin
return 
end

if @keyIdP =0 
begin
insert into @t values(null,null)
end
else
begin
insert into @t select keyId2  ,info2 from B 
end 
return;
end
go
/*cross apply  outer apply 可以将表1中的列作为表值函数的参数 然后再做笛卡尔积连接*/
select * from A cross apply dbo.fn_bkTb(A.keyId1) as t 
go 
select * from A outer apply dbo.fn_bkTb(A.keyId1) as t 
go 
select * from A cross join  dbo.fn_bkTb(0) as t 
go 

truncate table A;drop table A;
truncate table B;drop table B; 
drop function fn_bkTb;
 

mssql_cross_apply_outer_apply关键字简介

相关阅读:
mssql cross join关键字简介