SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询

本篇文章给大家带来了关于sql server的相关知识,其中主要介绍了sql server使用cross apply与outer apply实现连接查询的方法,文中通过示例代码介绍的非常详细,下面一起来看一下,希望对大家有帮助。

SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询

推荐学习:《SQL教程》

概述

CROSS APPLY 与 OUTER APPLY 可以做到:
左表一条关联右表多条记录时,我需要控制右表的某一条或多条记录跟左表匹配的情况。

有两张表:Student(学生表)和 Score(成绩表),数据如下:

SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询

一、CROSS APPLY

ROSS APPLY 的意思是“交叉应用”,在查询时首先查询左表,,然后右表的每一条记录跟左表的当前记录进行匹配。匹配成功则将左表与右表的记录合并为一条记录输出;匹配失败则抛弃左表与右表的记录。(与 INNER JOIN 类似)

查询每个学生最近两次的考试成绩。

SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1CROSS APPLY(    SELECT TOP 2 * FROM Score AS T    WHERE T1.StudentNo = T.StudentNo    ORDER BY T.ExamDate DESC) AS T2

结果:

SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询

二、OUTER APPLY

OUTER APPLY 的意思是“外部应用”,与 CROSS APPLY 的原理一致,只是在匹配失败时,左表与右表也将合并为一条记录输出,不过右表的输出字段为null。(与 LEFT OUTER JOIN 类似)

查询每个学生最近两次的考试成绩,没有参加考试的同学成绩补 null

蓝心千询 蓝心千询

蓝心千询是vivo推出的一个多功能AI智能助手

蓝心千询 34 查看详情 蓝心千询

SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1OUTER APPLY(    SELECT TOP 2 * FROM Score AS T    WHERE T1.StudentNo = T.StudentNo    ORDER BY T.ExamDate DESC) AS T2

结果:

SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询

三、应用场景

1.结合表值函数使用:

有一张表是这样的:

SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询

很简单的一张表,就一个字段num,我想把这个字段的int型数字分别转化成二进制八进制和十六进制的数值,有现成的进制转化的表值函数。

SELECT * FROM #T a CROSS APPLY [dbo].[F_TConversion](a.num)

SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询

总结一下:如果查询结果集需要用到表值函数对某个字段的值进行处理的话,请使用CROSS APPLY~

2.top子查询的用法:

有一张学生表,分别name,学科,分数 这三个字段,如下:

SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询

我要看语文第一名,数学前两名,英语前三名的name,学科,分数,用cross apply实现方法如下:

SELECT b.* FROM (    select Subject='Chiness',num=1 union all    select 'Math',2 union all    select 'English',3) a cross apply     (select top(a.num) * from Students where Subject=a.Subject ) b

SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询

推荐学习:《SQL教程》

以上就是SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/627920.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月11日 09:51:08
下一篇 2025年11月11日 09:55:52

相关推荐

发表回复

登录后才能评论
关注微信