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

时间:2024-01-18 23:44:01 

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, qtyFROM SalesCTEWHERE rownum > @pagesize * (@pagenum-1) AND rownum <= @pagesize * @pagenumORDER BY rownum;

 

说明:在上个例子中,其实SQL只审视了10行(2*5),也就是说,查看N页的话,SQL只查到N的页的数据,N页后面的数据一概不查看。

 

另外,每当移动一页,都会把这页放进缓存里,因此每次查询,就是逻辑查询(缓存)+物理查询的过程。物理查询只需要查询新请求的页即可,其他全部在缓存里执行,这样大大加快了查询速度。

 

 

MULTIPAGE ACCESS:

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

 

首先创建按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);


 

然后直接按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;


 

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的关系进行的编码。

 

比如:

SELECT empid, qty, RANK() OVER(ORDER BY qty) AS rnk, DENSE_RANK() OVER(ORDER BY qty) AS drnk FROM dbo.Sales ORDER BY qty;

 


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 lvlFROM dbo.SalesORDER BY qty, empid;

标签:SqlServer,T-SQL
0
投稿

猜你喜欢

  • python函数与方法的区别总结

    2021-08-21 00:07:51
  • PHP实现多文件上传的方法

    2023-11-23 03:42:04
  • Windows 平台做 Python 开发的最佳组合(推荐)

    2022-12-08 05:38:51
  • python主线程与子线程的结束顺序实例解析

    2023-10-09 12:46:07
  • python解决汉字编码问题:Unicode Decode Error

    2022-12-18 21:22:53
  • Centos7 安装 PHP7最新版的详细教程

    2023-10-16 21:14:12
  • Pygame游戏开发之太空射击实战添加图形篇

    2022-11-06 07:13:29
  • ACCESS数据库的压缩,备份,还原,下载,删除的实现

    2024-01-18 16:16:26
  • HTML+CSS 模仿Windows 7 桌面效果

    2010-06-17 14:33:00
  • vue-element如何实现动态换肤存储

    2024-04-27 15:57:35
  • ASP批量生成静态页面的写法(批量生成技巧iframe)

    2011-02-24 11:01:00
  • mysql中的日期相减的天数函数

    2024-01-20 01:00:51
  • 解析:安装 MySQL时如何选择安装软件包

    2008-12-31 17:15:00
  • linux下指定mysql数据库服务器主从同步的配置实例

    2024-01-20 01:16:05
  • 利用phpmyadmin设置mysql的权限方法

    2023-11-24 02:12:46
  • windows 10下安装搭建django1.10.3和Apache2.4的方法

    2022-01-01 01:07:51
  • vuex管理状态仓库使用详解

    2024-04-30 10:38:33
  • Python入门(六)Python数据类型

    2022-08-19 21:09:11
  • 选项卡动态增删的效果(内嵌框架)

    2008-05-22 12:59:00
  • 在Python中操作文件之seek()方法的使用教程

    2023-08-01 14:58:01
  • asp之家 网络编程 m.aspxhome.com