CROSS APPLY 和 OUTER APPLY 函数
适合场景:
一对多时取多个的其中几个(最大/最小的数)
前言
常开发中遇到多表查询时,首先会想到 INNER JOIN 或 LEFT OUTER JOIN 等等,但是这两种查询有时候不能满足需求。比如,左表一条关联右表多条记录时,我需要控制右表的某一条或多条记录跟左表匹配。貌似,INNER JOIN 或 LEFT OUTER JOIN 不能很好完成。但是 CROSS APPLY 与 OUTER APPLY 可以;
有两张表:供应商表和商品表,数据如下:
**CROSS APPLY:**不取为null的值
1.查询每个供应商产品价格最高的两件产品
select s.id,s.name, t.ProductName,t.price from supplier s
cross apply
(select top 2 * from products p where s.id = p.supplierid order by cast(p.price as int) desc ) as t
结果:
OUTER APPLY :可以取为null的值
总结:
CROSS APPLY 的意思是“交叉应用”,在查询时首先查询左表,然后右表的每一条记录跟左表的当前记录进行匹配。匹配成功则将左表与右表的记录合并为一条记录输出;匹配失败则抛弃左表与右表的记录。(与 INNER JOIN 类似)
OUTER APPLY 的意思是“外部应用”,与 CROSS APPLY 的原理一致,只是在匹配失败时,左表与右表也将合并为一条记录输出,不过右表的输出字段为 null。(与 LEFT OUTER JOIN 类似)
CROSS APPLY 和 OUTER APPLY 函数相关推荐
- SQL 关于apply的两种形式cross apply 和 outer apply
SQL 关于apply的两种形式cross apply 和 outer apply 阅读目录 SQL 关于apply的两种形式cross apply 和 outer apply Sql学习第四天--S ...
- SQL Server 2008的cross apply 和 outer apply
我们知道有个 SQL Server 2000 中有个 cross join 是用于交叉联接的.实际上增加 cross apply 和 outer apply 是用于交叉联接表值函数(返回表结果集的函数 ...
- mysql cross apply_SQL Server CROSS APPLY和OUTER APPLY的应用详解
SQL Server数据库操作中,在2005以上的版本新增加了一个APPLY表运算符的功能 SQL Server数据库操作中,在2005以上的版本新增加了一个APPLY表运算符的功能.新增的APPLY ...
- sql out apply_在SQL Server中CROSS APPLY和OUTER APPLY之间的区别
sql out apply SQL Server supports table valued functions, what are functions that return data in the ...
- 浅析 SQL Server 的 CROSS APPLY 和 OUTER APPLY 查询 - 第一部分
第一部分:APPLY 与 JOIN 你可能知道,SQL Server 中的 JOIN 操作用于联接两个或多个表.但是,在 SQL Server 中,JOIN 操作不能用于将表与表值函数的输出联接起来. ...
- sqlserver中cross apply与outer apply用法
apply有两种形式: cross apply 和 outer apply 先看看语法: <left_table_expression> {cross|outer} apply < ...
- SQL 关于apply的两种形式cross apply 和 outer apply(转)
转载链接:http://www.cnblogs.com/shuangnet/archive/2013/04/02/2995798.html apply有两种形式: cross apply 和 oute ...
- 【转载】SQL 关于apply的两种形式cross apply 和 outer apply
apply有两种形式: cross apply 和 outer apply 先看看语法: <left_table_expression> {cross|outer} apply < ...
- SQL Server中CROSS APPLY和OUTER APPLY的应用详解
SQL Server数据库操作中,在2005以上的版本新增加了一个APPLY表运算符的功能.新增的APPLY表运算符把右表表达式应用到左表表达式中的每一行.它不像JOIN那样先计算那个表表达式都可以, ...
- CROSS APPLY 和outer apply
/* CREATE TABLE A(id INT, NAME VARCHAR(30)) CREATE TABLE B(id INT, marks VARCHAR(30)) INSERT ...
最新文章
- 小目标 | DAX高级实践-Power BI与Excel联合应用
- CISCO 路由器(2)
- Google是否会成为下一个微软?
- 联想 重装系统后F5 F6键无法使用
- k8s pod资源限制策略:requests、limits配置示例
- C++卷积神经网络实例:tiny_cnn代码具体解释(7)——fully_connected_layer层结构类分析...
- 每日一题(9)—— 写一个标准宏MIN,这个宏输入两个参数并返回较小的一个
- 字符串的最长不重复字串
- Leetcode 254.因子的组合
- Centos7下ping通ip但是ping不通域名+firefox无法打开网页
- 新基建浪潮下服务机器人进入快车道 思岚科技推动产业“加速起跑”
- 【IDEA】解决: alt+/快捷键 冲突的问题
- 【独家折扣】淘客小程序源码
- c语言代码混淆器,工具:c 混淆器——AvIator
- 淘宝客微信发单机器人_返利机器人快速开发SDK
- 【源码】结构支持向量机的块坐标Frank-Wolfe优化
- LM2596/LM2596S多路降压稳压DC-DC开关电源芯片详解(第二部分:电路设计)(12V转5V、12V转3.3V、任意电压转任意电压)
- [转]周易入门三十五问答
- 日本公平贸易委员会结束对App Store的调查,苹果再次宣布整改
- 开心一笑,,,哈哈哈
热门文章
- bzoj5064 B-number 数位dp
- SBC在企业IP通信系统中的应用
- bartlett方差齐性检验_仅有两独立样本的样本量、均值和标准差,在SPSS进行T检验...
- 解决Ubuntu20.04插入英伟达计算卡后无法开机问题-Ubuntu双显卡切换
- 安装oracle提示你对制定的路径没有足够写入的权限,【网络安全知识竞赛】模拟题5...
- Typora怎么将文本居中
- C#UDP广域网,局域网通信-原理分析
- Verilog(2):与或非运算
- 最全最新cpu显卡天梯图_2019桌面级显卡排行_2019年2月最新CPU天梯图 桌面级处理器天梯图...
- 操作系统之调度 (十) --- 处理机调度、高级调度、中级调度、低级调度...