1、概念介绍

APPLy关键字是SQLServer版本中开始提供的一个系统关键字。

APPLY的功能同联接很类似,APPLY运算分左右两个部分,

APPLY的右表达式:左表达式的每一行都和右表达式进行一次计算,即右表达式需要根据左表达式提供的值进行相关计算来获取相关结果,然后返回给客户端。

APPLY的右表达式:是一个子查询或表值函数。

2、APPLY运算符和联接查询区别

APPLY:先进行左表达式的数据获取,然后根据左表达式的记录依次对右表达式的值进行相关获取。

联接:先对左右两张表进行笛卡尔乘积运算。

3、APPLY运算符的语法格式

CROSS APPLY:内部联接,两张表直接连接,不需要任何的关联条件,产生的结果就是这两张表的笛卡儿集等价于CROSS JOIN;

CROSS Apply 和 CROSS JOIN的区别:Cross Apply 可以在关联表子查询中用前一个关联表的字段的值,CROSS JOIN不可以。

比如:

SELECT * FROM t1 a CROSS APPLY t2 b WHERE a.id=b.id
--相当于 inner join
SELECT * FROM t1 a CROSS JOIN t2 b WHERE a.id=b.id --报错

OUTER APPLY:左外联接,右侧的表表达式返回一个空集合,CROSS APPLY运算符不会返回相应的左侧行,即OUTER APPLY和在派生表上进行LEFT JOIN是等同的

SELECT * FROM t1 a OUTER APPLY (select * from t2 where id=a.id) b
-- 相当于 left join。

4、Cross Apply 用途

4.1 配合表值函数使用

如果查询结果集需要用到表值函数对某个字段的值进行处理的话,可以使用CROSS APPLY。

4.2 top子查询的用法

-- 查询语文第一名,数学前两名,英语前五名的name,学科,分数,用cross apply实现方法如下

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

IT技术分享社区

个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

SQLServer基础:Apply关键字用法介绍相关推荐

  1. SQLServer优化:SQLServer中NOLOCK关键字的用法介绍

    1.为什么SQLServer有NOLOCK关键字? SQLServer没创建一个查询,都相当于创建一个查询会话,在不同的查询分析器里面进行的查询操作,可能会影响别的查询会话.比较典型的一个例子,如果你 ...

  2. 数据库 SQLServer中GUID用法介绍

    数据库 SQLServer中GUID用法介绍 1.NEWID用法 NEWID()作用是生成无顺序的GUID字符串.用法如下: SELECT NEWID() --生成36位的GUID SELECT RE ...

  3. 【Python_Xpath学习笔记(一)】 Xpath选择器基础用法介绍

    Xpath选择器基础用法介绍 前言 此篇文章中介绍Xpath的定义和基本使用方法,特此记录用来加深印象,较为基础. 正文 1.Xpath简介 Xpath:XML Path Language - XML ...

  4. ehviewer怎么搜索关键字_ehviewer怎么用-ehviewer用法介绍-Appfound

    ehviewer受到了很多玩家的喜爱,想必大家都很想知道ehviewer怎么用吧.下面appfound手游网小编就为各位玩家带来了ehviewer的用法介绍,快来看看吧. ehviewerv怎么用 安 ...

  5. mysql常见关键字的用法_MySQL 常用关键字用法详解

    MySQL 常用关键字用法详解 在开发工程中,操作数据库的时候经常会有不同类型的条件查询,除了使用where外,Mysql本身也提供了很多常用的关键字.本文主要介绍一些常用的关键字,像update.i ...

  6. python类装饰器详解-Python装饰器基础概念与用法详解

    本文实例讲述了Python装饰器基础概念与用法.分享给大家供大家参考,具体如下: 装饰器基础 前面快速介绍了装饰器的语法,在这里,我们将深入装饰器内部工作机制,更详细更系统地介绍装饰器的内容,并学习自 ...

  7. python线程创建对象_Python线程下thread对象的用法介绍(附实例)

    本篇文章给大家带来的内容是关于Python线程下thread对象的用法介绍(附实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Thread对象 Thread类用于表示单独的控制 ...

  8. python自动化_python自动化测试-Behave框架的用法介绍 - python测试学习

    测码学院  Behave框架的用法介绍 众所周知:行为驱动开发((behavior-drivendevelopment,BDD)是一种基于敏捷软件开发的方法.它可以鼓励开发人员,业务参与者和QA人员之 ...

  9. a jquery 标签点击不跳转_form标签的action属性怎么用?form标签action属性的用法介绍(附实例)...

    本篇文章主要的介绍了关于HTML中form标签action属性的用法介绍和实例,还有关于form标签的action属性的定义和语法介绍,最后徐还有关于form标签的action属性的作用解释.现在让我 ...

最新文章

  1. linux crond命令
  2. 强大的数据库管理工具Navicat Premium安装教程
  3. 代理模式源码解析(jdk+spring+mybatis)
  4. 判断大小简单算法_JVM GC算法
  5. static静态属性 java 1614870751
  6. daily scrum 11.9
  7. 暴涨30%!马斯克突然杀入推特:当上最大股东!
  8. JavaScript学习(四十)—字面量创建对象图解
  9. 对Oracle SQL Developer中 变量的学习
  10. MathorCup数模竞赛,为你的保研之路添砖加瓦~
  11. 简单三步,教你搭建一个私有云盘
  12. HTML作业制作服装推广软文,盘点:服装推广软文写作技巧
  13. Proguard混淆器
  14. 2011年分形艺术国际大赛比赛规则
  15. Windows10电脑进行拨号连接时,无法共享热点?如何解决?多次尝试后,终于解决了。
  16. uni-app - MUMU模拟器模拟 iPad 尺寸开发(分辨率及DPI调整)
  17. 通达信自带指标 均线多头排列(DTPL)
  18. windows系统bat批处理 电子教室加卡他卡 伽卡他卡学生端暴力关闭 无敌版
  19. 对d3d9里面的函数挂钩实现透视
  20. 谷歌语音合成_如何修改Google语音合成语音

热门文章

  1. Mozilla 放出新的 Firefox 3.5 RC 版本(RC 3)
  2. linux下查看隐藏的文件
  3. HALCON示例程序particle.hdev测量小圆部分
  4. 【tensorFlow】——图像数据增强、读取图像、保存图像
  5. 类的静态成量变量必须初始化
  6. spring整合mybatis接口无法注入问题
  7. 单元测试mock当前时间
  8. 最小生成树练习1(克鲁斯卡尔算法Kruskal)
  9. unity中如何解决镜头穿透模型?
  10. 算法题11 字符串的所有对称子串