• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >MsSql > SQLServer APPLY表运算符使用介绍

SQLServer APPLY表运算符使用介绍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了sql server apply,sql server 创建表,sql server 建表,sql server 删除表,sql server 复制表等相关知识,希望本文的分享对您有所帮助
新增的APPLY表运算符把右表表达式应用到左表表达式中的每一行。它不像JOIN那样先计算那个表表达式都可以,APPLY必选先逻辑地计算左表达式。这种计算输入的逻辑顺序允许吧右表达式关联到左表表达式。

  APPLY有两种形式,一个是OUTER APPLY,一个是CROSS APPLY,区别在于指定OUTER,意味着结果集中将包含使右表表达式为空的左表表达式中的行,而指定CROSS,则相反,结果集中不包含使右表表达式为空的左表表达式中的行。

  用几个例子解释这个会更清晰。

  例1:CROSS APPLY 形式

  比如:LargeTable表中的某一列存储的数据是以“:”号分隔的数据,我们处理的时候,可能要先把这个值,先分隔,然后把分隔后的每个值单独一行放在一张表中,然后对这个表做处理。

  原始数据(LargeTable表):
  

  为了简单,我们先拿其中id=2的一行处理,这些以:号分隔的数据,可能是我们某张表的主键(t1),我们可能需要把这些数值提出来,放在一张临时表中,和t1表关联,做一些处理。

  处理这个分隔的数据结果如下图:

  

  如果用之前的版本处理这个操作的话,应该很发杂,暂时没想到怎么处理,如果有人实现过,可以提示一下。

  这只是用其中一行做的处理,如果我们用上图的3行都做这样处理,把三行以:号分隔的数值都放在一个表中,该怎么处理呢?

  今天的主角APPLY该闪亮登场了。用APPLY表运算符一行语句就能处理以上操作。

  

  是不是很简单。
     需要额外定义的就是那个自定义表值函数(split),这是我在网上找的,类似.Net中Split操作,代码如下:

  场景:有个供货商表(Supplier)和供货商产品表(Products),我们要取每一个供货商中单价最高的两个产品。

  供货商表:

  

  供货商产品表:

  

  首先,我们创建一个自定义表值函数(dbo.fn_top_products),该函数根据供货商ID返回单价最高的两个商品。

   

  注意最后为NULL的记录,reed公司因为没有商品,所以单价为NULL了。

  如果用CROSS APPLY形式,执行以下查询:


生成的输出结果如下:

    

  大家看出OUTER APPLY和CROSS APPLY的区别了吧。

  再次说一下APPLY的执行过程,它先逻辑计算左表表达式(以上的LargeTable表),然后把右表达式(以上的自定义表值函数Split)应用到左表表达式的每一行。实际是把外部查询的列引用作为参数传递给表值函数。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • SQL Server CROSS APPLY和OUTER APPLY的应用详解
  • SQLServer APPLY表运算符使用介绍

相关文章

  • 2017-05-11SQL Server中的XML数据进行insert、update、delete操作实现代码
  • 2017-05-11SQL2008 附加数据库提示 5120错误 解决办法
  • 2017-05-11sql2005数据导出方法(使用存储过程导出数据为脚本)
  • 2017-05-11Sql Server 2008完全卸载方法(其他版本类似)第1/2页
  • 2017-05-11一个删除指定表的所有索引和统计的过程
  • 2017-05-11sql server 2008数据库无法启动的解决办法(图文教程)
  • 2017-05-11Access 导入到SQL Server 2005的方法小结
  • 2017-05-11sql2005 存储过程分页代码
  • 2017-05-11图文详解Windows Server2012 R2中安装SQL Server2008
  • 2017-05-11SQLSERVER 2005中使用sql语句对xml文件和其数据的进行操作(很全面)

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 在登录触发器错误情况下连接SQL Server的方法
    • Windows2003 SQL2005添加系统用户修改系统登录密码
    • sql server 2008 忘记sa密码的解决方法
    • SQL 2005 ERROR:3145 解决办法(备份集中的数据库备份与现有的数据库不同)
    • SQL Server 2008 数据库镜像部署实例之一 数据库准备
    • sql server 2008数据库连接字符串大全
    • sql server 2005因架构无法删除用户错误15138的解决方法
    • SQL Server 2000向SQL Server 2008 R2推送数据图文教程
    • Access 导入到SQL Server 2005的方法小结
    • SQLServer2005 没有服务器名称的两种解决方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有