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

概述

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

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.结合表值函数使用:

很简单的一张表,就一个字段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 Server怎么使用CROSS APPLY与OUTER APPLY实现连接查询”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

文章标题:SQL Server怎么使用CROSS APPLY与OUTER APPLY实现连接查询,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/21335

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年8月29日 下午11:57
下一篇 2022年8月29日 下午11:58

相关推荐

  • 怎么用Vue+java实现时间段的搜索

    实现效果如图: 标红的是需要注意的地方!Vue操作:1,如图: 2,如图:(数据初始化) 2.0初始化今天的日期和时间的样式: 2.1今天的日期: // 时间范围–start// daterangeLastInTime: [],// daterangeLastInTime: [n…

    2022年9月19日
    10200
  • JavaScript单线程和任务队列是什么

    本文章是对以往“JavaScript单线程和任务队列是什么”知识点的总结与梳理,不仅内容丰富、详细,而且知识点逻辑十分清晰。相信多数人读完本文后,会对“JavaScript单线程和任务队列是什么”的知识内容,有更为深入的理解和认识。 一、JavaScript为什么设计为单线程? JavaScript…

    2022年6月27日
    9300
  • windows显示器颜色如何校正

    显示器颜色校正的方法: 1、首先点击左下角开始,然后点击“windows系统”打开“控制面板”。 2、然后点击里面的“颜色管理”。 3、在任务选项中点击“高级”。 4、下拉,点击“校准显示器”。 5、最后就可以根据提示进行校准了。 到此,相信大家对“windows显示器颜色如何校正”有了更深的了解,…

    2022年8月27日
    10900
  • 安卓APP逆向分析与保护机制是怎样的

    想知道Android App常见的保护方法及其对应的逆向分析方法吗? 安卓APP安全包含很多内容,本次分享了混淆代码、整体Dex加固、拆分 Dex 加固、虚拟机加固等方面。事实上,这些内容也是国内近几年Android App安全保护的一种主要趋势。 一、混淆代码 Java代码是非常容易反编译的,作为…

    2022年9月13日
    13400
  • SQL注入类型是什么

    前言 SQL注入的攻击方式根据应用程序处理数据库返回内容的不同,可以分为可显注入、报错注入和盲注。 可显注入 攻击者可以直接在当前界面内容中获取想要获得的内容。 报错注入 数据库查询返回结果并没有在页面中显示,但是应用程序将数据库报错信息打印到了页面中,所以攻击者可以构造数据库报错语句,从报错信息中…

    2022年9月6日
    15500
  • php unserialize反序列化漏洞分析

    题目如下: 漏洞解析: (上图代码第11行正则表达式应改为:’/O:d:/’) 题目考察对php反序列化函数的利用。在第10行 loadData() 函数中,我们发现了 unserialize 函数对传入的 $data 变量进行了反序列。在反序列化前,对变量内容进行了判断,先…

    2022年8月30日
    29300
  • HTML的p标签可不可以不用align

    HTML中的p标签可以不用align属性;因为该属性在“HTML 4.01”中已经被废弃,在HTML5中已经不支持该属性了,可以使用css进行替代该属性,该属性用于规定段落中文本的对齐方式。 本教程操作环境:windows10系统、HTML5版本、Dell G3电脑。 HTML的p标签可以不用ali…

    2022年9月2日
    8700
  • windows浩辰cad看图王图形怎么填充颜色

    浩辰cad看图王图形填充颜色: 答:浩辰cad看图王没有图形填充功能。 1、浩辰cad看图王只能修改图纸的背景颜色。 2、通过修改背景颜色,可以让图纸的观感更加清晰。 3、只有在CAD本体软件中才能使用图形填充颜色。 4、下载安装完成后,打开软件,在下方命令中输入“H”,回车运行。 5、打开图案填充…

    2022年9月21日
    26300
  • windows驱动精灵安装目录无效请重新指定如何解决

    解决方法: 方法一: 很多情况下是因为从U盘上复制来驱动之后,没有及时将U盘拔掉。 应该及时拔下U盘,再次尝试点击安装。 方法二: 如果安装的驱动与你的系统不匹配也会造成这种原因。 尝试重新下载对应的驱动,再次进行安装。 方法三: 1、进入驱动精灵点击右上角三横。 2、在下拉任务中点击“设置”。 3…

    2022年9月10日
    51200
  • WEB开发中常见漏洞防御方法是什么

    SQL注入漏洞 SQL注入漏洞产生原因及危害 在sql查询中很多程序员会将变量拼接入sql语句后再进行查询,这样如果黑客在参数中插入其他sql语句就可能导致我们网站的密码被被黑客查询出来或者被拖取大量数据,如果在开发中使用了字符串拼接进SQL语句就必须进行严格的过滤,任何用户输入的内容都不可信任,以…

    2022年9月26日
    8200
联系我们
站长微信
站长微信
分享本页
返回顶部