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

SqlServer 2005 T-SQL Query 学习笔记(3)

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

通过本文主要向大家介绍了SqlServer 2005 T-SQL Query 学习笔记(3)等相关知识,希望本文的分享对您有所帮助

AD HOC PAGING:

就是指用页面的序号和页面的大小请求一个单独的页面。下面是例子。

DECLARE @pagesize AS INT, @pagenum AS INT; SET @pagesize = 5; SET @pagenum = 2; WITH SalesCTE AS ( SELECT ROW_NUMBER() OVER(ORDER BY qty, empid) AS rownum, empid, mgrid, qty FROM dbo.Sales ) SELECT rownum, empid, mgrid, qty FROM SalesCTE WHERE rownum > @pagesize * (@pagenum-1) AND rownum <= @pagesize * @pagenum ORDER BY rownum;
 
说明:在上个例子中,其实SQL只审视了10行(2*5),也就是说,查看N页的话,SQL只查到N的页的数据,N页后面的数据一概不查看。
 
另外,每当移动一页,都会把这页放进缓存里,因此每次查询,就是逻辑查询(缓存)+物理查询的过程。物理查询只需要查询新请求的页即可,其他全部在缓存里执行,这样大大加快了查询速度。
 
 

MULTIPAGE ACCESS:

如果结果集不是很大,而且分了多个请求页面,请求也不向前移动,那么这是一个好的方案:首先在一个表里使用ROW_NUMBER具体化所有的页,然后创建一个群集索引。下面是例子。
</div>

 

首先创建按ROW_NUMBER把列编好,

 

SELECT ROW_NUMBER() OVER(ORDER BY qty, empid) AS rownum, empid, mgrid, qty INTO #SalesRN FROM dbo.Sales; CREATE UNIQUE CLUSTERED INDEX idx_rn ON #SalesRN(rownum);</div>

 

然后直接按ROWNUM查询,

DECLARE @pagesize AS INT, @pagenum AS INT; SET @pagesize = 5; SET @pagenum = 2; SELECT rownum, empid, mgrid, qty FROM #SalesRN WHERE rownum BETWEEN @pagesize * (@pagenum-1) + 1 AND @pagesize * @pagenum ORDER BY rownum;</div>

 

RANK & DENSE RANK

这2个函数和ROW_NUMBER的区别是:ROW_NUMBER在ORDER BY的条件里有重复行存在的话,是把这些重复行也按INDEX排列的,但是RANK和DENSE RANK总是确定的,即只要是ORDER BY重复的行,他们是统一INDEX的。

 

RANK和DENSE_RANK的区别是,RANK是如果上级的INDEX和下级的INDEX有可能不是+1关系,是按下级真正处于列里的位置进行INDEX,而DENSE_RANK是按照跟上级的INDEX+1的关系进行的编码。

 

比如:

NTILE

NTILE的用法和其他的RANK函数一样,只不过它可以传入一个参数,用来决定最大的INDEX是多少:它会按行数进行除法,然后平均分配行数进行INDEX的标示。

比如,如果有11列,那么首先11/3=3,3列一组作为一个INDEX,然后,11%3=2,这2列会分别加在前面的2组上。

比如,

SELECT empid, qty, CASE NTILE(3) OVER(ORDER BY qty, empid) WHEN 1 THEN 'low' WHEN 2 THEN 'medium' WHEN 3 THEN 'high' END AS lvl FROM dbo.Sales ORDER BY qty, empid;</div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

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

相关文章

  • 2017-05-11SQL Server 2008中的代码安全(三) 通过PassPhrase加密
  • 2017-05-11SQLServer 设置单词首字母大写
  • 2017-05-11sql server 2008 忘记sa密码的解决方法
  • 2017-05-11安装sql server 2008时的4个常见错误和解决方法
  • 2017-05-11如何在SQL Server 2005数据库中导入SQL Server 2008的数据
  • 2017-05-11SQLSERVER2008中CTE的Split与CLR的性能比较
  • 2017-05-11PowerDesigner16生成SQL2005列注释的方法
  • 2017-05-11迁移sql2005到sql2008r2步骤
  • 2017-05-11SQL2005重新生成索引的的存储过程 sp_rebuild_index 原创
  • 2017-05-11sqlserver2005自动创建数据表和自动添加某个字段索引

文章分类

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

最近更新的内容

    • SQL Server 2008 数据库镜像部署实例之三 配置见证服务器
    • 快速将珊瑚虫IP数据库转MS SQL2005的图文教程第1/2页
    • SQL Server 2008 R2安装配置方法图文教程
    • SQL Server 2005中更改sa的用户名的方法
    • SQL SERVER 2008 无法附加数据库的解决方法
    • 使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法
    • Windows2003 SQL2005添加系统用户修改系统登录密码
    • SQL2005CLR函数扩展-深入环比计算的详解
    • SQL Server 在Management Studio中使用Web浏览器
    • sqlserver 存储过程中的top+变量使用分析(downmoon)

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

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