文档章节

常用数据库分页

learn_more
 learn_more
发布于 2015/05/02 23:53
字数 572
阅读 277
收藏 45

1、Oracle 分页

 

第一种:利用分析函数row_number() 方法

SELECT
    *
FROM
    (
           select t.*, row_number () over (ORDER BY t1.id) rowno
        FROM
            TABLE1
    )  where rowno BETWEEN 21
AND 40;

第二种:直接使用rownum 虚列(推荐

SELECT
    *
FROM
    (
        SELECT
            t.*, rownum AS rowno
        FROM
            TABLE1
    )
WHERE
    rowno BETWEEN 10
AND 20

第三种:不使用between and 进行分页

 

 

SELECT * FROM

    (SELECT A.* ,  rownum r  

    FROM

        (SELECT  *  FROM msr_topic

        Where name like %hr%

        ) A

    WHERE rownum <= indexEnd

    ) B

WHERE r > indexStart;

 

总结:显然第二种方法比较好,第三种方法最差!因为不用order by语句,会提高检索数据的速度的,尤其数据量越大时,第二种方法快速检索数据越明显。oracle中慎用带有order by的分页。尤其是在oracle10g中,会出现会引起混乱,即相同记录会出现在不同页中。 

 

 

 

2、SqlServer 分页

 

 

第一种方法:通过TOP函数来实现(推荐

SELECT TOP 10  *  FROM TestTable  WHERE  (
              id NOT IN  (
        SELECT TOP 20  *  FROM TestTable ORDER BY id
    )     
)   ORDER BY ID

第二种方法:通过Max函数来实现

select top limit  * from table1   where id > (
    select max  (id)     from    (
        select top  ((page - 1) * LIMIT)  id from table1 order by id
    )  as T   
)
ORDER BY
    id

第三种方法:通过 ROW_NUMBER 函数+Top 来实现

SELECT
    TOP
LIMIT *  FROM (
       SELECT top
    LIMIT ROW_NUMBER () OVER (ORDER BY ReportID) AS RowNo    FROM TABLE
) AS A
WHERE
    RowNo > page * 10

第四种方法:通过 ROW_NUMBER 函数+Between And 来实现

 

select *
 from
    (select  *  ROW_NUMBER( )over( order by u_id )  as  row_id
    from users
    where u_name like %hr%
    )  as  temp_users
Where  row_id between  ${start}  and  ${end}


总结:

1)第一种方法有一个致命的缺点,就是它含有NOT IN字样,要换成用not exists来代替not in;

2)第二种方法注意ID必须唯一,不能使用复合主键,而且主键也必须是有规律的数字,否则无法比较

3)第三种方法ROW_NUMBER() 就是生成一个顺序的行号,而他生成顺序的标准,就是后面紧跟的OVER(ORDER BY ReportID),其中ReportID可以是联合主键。不用说 自带函数时最差的,不要使用这种方式。

4)与第三种方式一样,效率低下
 

3、mysql分页


select   *   from   table   limit   start , size

 

 

4、PostgreSQL 分页

 

 

select   *   from   table   limit  size offset start  

 

参考:

http://jingyan.baidu.com/article/db55b609e037584ba30a2ff7.html

 

© 著作权归作者所有

learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
加载中

评论(4)

learn_more
learn_more 博主

引用来自“sgq0085”的评论

oracle好像推荐第三种,第二种在某些情况下查询结果跟预期不符,关键还是在于第三种先小于一个数字那里
嗯,博客中的推荐仅仅代表个人主观意见,没有进行实测,请见谅
sgq0085
sgq0085
oracle好像推荐第三种,第二种在某些情况下查询结果跟预期不符,关键还是在于第三种先小于一个数字那里
learn_more
learn_more 博主

引用来自“realanan”的评论

这么说来,sqlserver没有一个比较完美的方法进行分页了?
个人意见,第一种方法:通过TOP函数来实现是最好的!当然,没有实际比较测试,项目中使用最多的第一种方法以及JDBC结果集移动处理进行分页等
realanan
realanan
这么说来,sqlserver没有一个比较完美的方法进行分页了?
PageHelper分页插件及通用分页js

分页概述 1.物理分页 物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页结果。建...

锦城学长
2018/10/01
0
0
Android提高第八篇之SQLite分页读取

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! Android包含了常用于嵌入式系统的SQLite,免去了开发者自己移植安装的功夫。SQLite 支持多数 SQL92 标准,很多常用的SQL命令都...

晨曦之光
2012/03/14
1.5K
0
数据库访问之Sqlite的不同之处

在我的Winform开发框架中,底层的数据访问支持多种不同的数据库,在数据库访问的开发过程中,发现Sqlite多数情况下,操作都和SqlServer或者说是和标准Sql差不多的。当然,Sqlite本身也有一些...

长平狐
2012/08/22
133
0
数据库访问之Sqlite的不同之处

在我的Winform开发框架中,底层的数据访问支持多种不同的数据库,在数据库访问的开发过程中,发现Sqlite多数情况下,操作都和SqlServer或者说是和标准Sql差不多的。当然,Sqlite本身也有一些...

长平狐
2012/06/11
85
0
MySQL · 答疑解惑 · MySQL Sort 分页

背景 6.5号,小编在 Aliyun 的论坛中发现一位开发者提的一个问题,说 RDS 发现了一个超级大BUG,吓的小编一身冷汗 = =!! 赶紧来看看,背景是一个RDS用户创建了一张表,在一个都是NULL值的非索...

阿里云RDS-数据库内核组
2015/06/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

spring cloud 是什么,学习什么

一、什么是springcloud,有什么作用   Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、...

FH-Admin
17分钟前
41
0
【招聘】医疗行业

产品经理(1人) 【岗位职责】 1.方案策划:对互联网医疗信息化项目全流程负责,包括产品的需求、开发、推广、实施各个过程;跟踪国内外最新进展、发展趋势、竞争厂家研发信息、国家政策信息...

挨踢得要死要死的某瓜
19分钟前
251
0
「网易官方」极客战记(codecombat)攻略-地牢-Kithgard 学徒kithgard-apprentice

那么这就是年轻的食人魔巫师和术士来研究的地方? 默认代码 # 你的目标是生存。 # 也很有趣。 也许能嬴上排行榜! # 你第一次来地牢的时候,应该没见过这个房间。 概览 这是你测试技能战术的...

极客战记
23分钟前
31
0
TI AM570x浮点DSP C66x + ARM Cortex-A15开发板的CSI2 CAMERA接口、以太网接口

TL570x-EVM是一款由创龙基于SOM-TL570x核心板设计的开发板,它为用户提供了SOM-TL570x核心板的测试平台,用于快速评估SOM-TL570x核心板的整体性能。 TL570x-EVM底板采用沉金无铅工艺的4层板设...

Tronlong创龙
31分钟前
23
0
程序员必须掌握的核心算法有哪些?

由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程...

摩尔12
42分钟前
39
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部