cross apply 与 inner join 的区别

原创 2016年06月01日 15:30:31

下面还有一个小例子,根据小例子可以将cross apply /outer apply 分别换成inner join /left join,结果是一样的,但是cross apply之后一般是带函数.
inner join之后一般是带表.

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

/*
select a.*,b.课程,b.分数
from 
    #T a
inner join#t2 b
where a.姓名=b.姓名

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

/*
select a.*,b.课程,b.分数
from 
    #T a
left join#t2 b
where a.姓名=b.姓名

*/

/*
姓名         课程         分数
---------- ---------- -----------
张三         语文         74
张三         数学         83
张三         物理         93
李四         NULL       NULL
NULL       NULL       NULL
 
(5 行受影响)

正好在查询cross apply与outer apply 区别的时候,同事看到了,然后就给了我下面的例子,解开了我之前的面试之谜。。。
(当时我用row_number,墨迹半天还觉得不对。。今天终于解决了)

选出每个source 的前100条数据!!
with b as (select distinct source from aqua_rpt.crd.crd_report_sft_derv_data) 
select * from b 
cross apply 

(select top 100 * from aqua_rpt.crd.crd_report_sft_derv_data a where b.source = a.source) a


当然也可以用下面的语句,但是由于 b表数据量很大,所以考虑到消耗内存太大,就采用 CTE.

select b.source,a.*

from aqua_rpt.crd.crd_report_sft_derv_data b

cross apply 

(select top 100 * from aqua_rpt.crd.crd_report_sft_derv_data a where b.source = a.source) a



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

cross apply和表值函数进行关联查询

目前场景是有一个兴趣爱好类型表和一个员工爱好表,员工爱好表中的爱好一列,如果这个员工有多个爱好,那么就将这些爱好放到一条记录当中,爱好之间用逗号隔开,现在需求是要将每个员工的这些爱好分隔成一条条记录查...

CROSS APPLY和 OUTER APPLY 区别详解

SQL Server 2005 新增 cross apply 和 outer apply 联接语句,增加这两个东东有啥作用呢?  我们知道有个 SQL Server 2000 中有个 cro...

SQL关于apply的两种形式cross apply和outer apply

SQL Server数据库操作中,在2005以上的版本新增加了一个APPLY表运算符的功能。新增的APPLY表运算符把右表表达式应用到左表表达式中的每一行。它不像JOIN那样先计算那个表表达式都可以,...

ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法

ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法      今天在使用多字段去重时,由于某些字段有多种可能性,只需根据部分字段进行去重...

SQL Server拆分字符串的3常用种方法

以下的文章主要是介绍的是SQL Server拆分字符串的3常用种方法,我前两天在相关网站看见SQL Server拆分字符串的3常用种方法的资料,觉得挺好,就拿出来供大家分享,望会给大家带来一些帮助在此...

[MSSQL]cross join与cross apply的区别与应用

What is Cross Join in SQL? The SQL CROSS JOIN produces a result set which is the number of rows in ...

關於Cross Join 和 Outer/Cross Apply

先為大家準備點數據: CREATETABLE TA(Acol INT); GO INSERTINTO TA SELECT 1 UNION ALL SELECT 2; GO CREATETAB...

SQL Server中以apply运算符简化join和子查询

 关系数据库中涉及多表操作会使查询变复杂。 多个表的查询,常用的操作方法就是使用表联接(join)或子查询。在sql server 2005中新增了apply运算符, 它能简化原来用join或子...

用CROSS APPLY解开了困扰我一年多的一个问题

假设有一个表叫SongsTop,是歌曲下载情况的记录。 Star,SongName,Hot周杰伦,乔克叔叔,2861周杰伦,稻香,4842周杰伦,兰亭序,2656周杰伦,流浪诗人,1568S.H.E,...
  • ki1381
  • ki1381
  • 2008-10-30 22:29
  • 3512

SQL Inner Join,Outer Join,Cross Join, Natural Join 的定义和区别

最近参与了一个Postgresql相关的项目开发,工作中遇到关于表连接操作的处理,若想正确处理表之间的连接操作,对表的连接的操作类型和区别一定要有个清醒的认识,本文就是我对表连接操作的认识,不足支出还...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)