`
jadewoo
  • 浏览: 86338 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Oracle、MYSQL、sql server和DB2分页查询写法

阅读更多
 一、DB2:

  DB2分页查询

  SELECT * FROM (Select 字段1,字段2,字段3,rownumber() over(ORDER BY 排序用的列名 ASC) AS rn from 表名) AS a1 WHERE a1.rn BETWEEN 10 AND 20

  以上表示提取第10到20的纪录

  select * from (select rownumber() over(order by id asc ) as rowid from table where rowid <=endIndex ) where rowid > startIndex

  如果Order By 的字段有重复的值,那一定要把此字段放到 over()中

select * from ( select ROW_NUMBER() OVER(ORDER BY DOC_UUID DESC) AS ROWNUM, DOC_UUID, DOC_DISPATCHORG,       DOC_SIGNER, DOC_TITLE    from DT_DOCUMENT  ) a  where ROWNUM > 20 and ROWNUM <=30


增加行号,不排序

select * from ( select ROW_NUMBER() OVER() AS ROWNUM,t.*  from DT_DOCUMENT  t ) a

增加行号,按某列排序

select * from ( select ROW_NUMBER() OVER( ORDER BY DOC_UUID DESC ) AS ROWNUM,t.*  from DT_DOCUMENT  t ) a


  二、Mysql:

  最简单

  select * from table limit start,pageNum

  比如从10取20个数据

  select * from table limit 10,20

  三、Oracle:

  select * from (select rownum,name from table where rownum <=endIndex ) where rownum > startIndex

  例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:

  SELECT *

  FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2

  Where t2.R >= 10

 四、 sql server:

分页方案一:(利用Not In和SELECT TOP分页)
语句形式:
SELECT TOP 10 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 20 id
FROM TestTable
ORDER BY id))
ORDER BY ID


SELECT TOP 页大小 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 页大小*页数 id
FROM 表
ORDER BY id))
ORDER BY ID

-------------------------------------

分页方案二:(利用ID大于多少和SELECT TOP分页)
语句形式:
SELECT TOP 10 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 20 id
FROM TestTable
ORDER BY id) AS T))
ORDER BY ID


SELECT TOP 页大小 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 页大小*页数 id
FROM 表
ORDER BY id) AS T))
ORDER BY ID


-------------------------------------

分页方案三:(利用SQL的游标存储过程分页)
create procedure XiaoZhengGe
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off

其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
建议优化的时候,加上主键和索引,查询效率会提高。

通过SQL 查询分析器,显示比较:我的结论是:
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句
分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用 


分享到:
评论

相关推荐

    支持 oracle mysql sql server db2等数据库

    【压缩包子文件的文件名称列表】:dbeaver,这可能是该数据库客户端工具的名字,DBeaver是一款开源、免费的通用数据库管理和开发工具,支持多种数据库系统,包括上述提到的Oracle、MySQL、SQL Server和DB2等。...

    sql 分页 oracle mysql sqlserver

    sql 分页 针对oracle mysql sqlserver 等数据库的通用类

    oracle,sqlserver,db2驱动包亲测可用

    在IT行业中,数据库是数据存储和管理的核心工具,而Oracle、SQL Server和DB2是三种广泛应用的关系型数据库管理系统。为了与这些数据库进行交互,开发者通常需要相应的数据库驱动程序,也就是JDBC驱动。本文将详细...

    oracle,sqlserver及mysql对比

    Oracle、SQL Server 及 MySQL 的查询语句执行顺序相同:开始-&gt;FROM 子句-&gt;WHERE 子句-&gt;GROUP BY 子句-&gt;HAVING 子句-&gt;ORDER BY 子句-&gt;SELECT 子句-&gt;LIMIT 子句。每个子句执行后都会产生一个中间结果,供接下来的子句...

    用于oracle,mysql,sqlserver,数据库分页联合查询

    本话题主要聚焦于如何在Oracle、MySQL和SQL Server这三种主流关系型数据库中实现分页联合查询。 首先,我们来看Oracle数据库的分页查询。Oracle使用ROWNUM关键字来实现分页。例如,如果我们想获取第10到20条记录,...

    oracle到sqlserver 跨库查询

    .oracle 到 SQL Server 跨库查询 ...通过安装和配置网关软件、配置 Oracle 数据库和进行数据抽取,可以实现 SQL Server 到 Oracle 的跨库查询。这种技术可以应用于数据整合、数据分析和报表生成等领域。

    Oracle,SQl,MySql实现分页查询

    本文将基于提供的文件信息,深入探讨三种不同的分页查询方法及其在Oracle、SQL Server(这里用SQL代替)、MySQL中的实现方式,并对它们的性能进行对比分析。 #### 分页方案一:利用Not In和SELECT TOP分页 **基本...

    oracle mysql SQL server分页

    ### Oracle、MySQL与SQL Server 分页查询详解 在数据库应用中,分页是常见的数据处理方式之一,尤其在展示大量数据时,通过分页技术可以有效地提高系统的响应速度和用户体验。本文将详细介绍Oracle、MySQL以及SQL ...

    oracle mysql sqlserver分页

    以上就是Oracle、MySQL和SQL Server三种数据库中分页查询的基本实现方法。通过这些方法,我们可以有效地处理大量数据的分页显示问题,提高应用程序的性能和用户体验。每种数据库的实现细节有所不同,因此在实际开发...

    sqlserver,mysql,oracle三种数据库的分页查询

    本文将深入探讨SQL Server、MySQL和Oracle这三种主流数据库系统中的分页查询实现方式。 首先,我们来看SQL Server。SQL Server提供了一种称为"TOP"的关键字来实现分页。例如,如果我们想获取第1页(假设每页有10条...

    瀚高迁移工具,迁移工具支持源端为Oracle、MySQL、SQL Server、DB2、Kingbase、DM

    迁移工具版本为hgdb-migration-v4.1.4,瀚高数据库迁移工具支持源端为Oracle、MySQL、SQL Server、DB2、KingbaseV7、KingbaseV8、DM7、DM8、HIGHGO数据库,目标端为HIGHGO、PostgreSQL数据库的自动化迁移,为了能更...

    ORACLE MYSQL SQLSERVER DB2等数据库转换工具百度云

    ORACLE MYSQL SQLSERVER DB2等数据库转换工具百度云链接,永久有效,版本比较老,可能不支持新版本。

    oracle mysql sql server 等数据库的分页要点解析

    分页技术在Oracle、MySQL和SQL Server等主流数据库系统中都有其独特的实现方式。 **为什么需要分页** 1. **方便用户查看**:在网页或应用程序中,如果一次性加载所有数据,用户可能会被海量信息淹没,分页则可以将...

    比较SQL Server、Oracle和DB2

    在数据库管理领域,SQL Server、Oracle和DB2是三大主流的关系型数据库管理系统(RDBMS),它们各自拥有独特的特性和优势。以下是对这三个数据库系统的详细比较: 1. SQL Server(微软公司产品): - **易用性**:...

    Oracle与SQLServer的SQL语法差异

    Oracle与SQLServer的SQL语法差异,用简单易懂的语言和实例对Oracle和Sql Server语法之间的差异进行了对比分析,更加适用于入门的人

    Oracle Sql语句转换成Mysql Sql语句

    2. **分页查询**:Oracle使用ROWNUM进行分页,而MySQL通常使用LIMIT和OFFSET。在转换过程中,需要将Oracle的ROWNUM替换为MySQL的LIMIT子句。 3. **连接查询**:Oracle的JOIN语法允许在ON条件中使用子查询,而在...

    mysql oracle sqlserver db2 sbase数据库安装

    mysql oracle sqlserver db2 sbase

    mysql,oracle,sqlserver分页

    ### 数据库分页技术详解:MySQL、Oracle与SQL Server #### Oracle 分页 在Oracle数据库中实现分页功能,主要依赖于`ROWNUM`伪列。`ROWNUM`用于为查询结果集中的每一行分配一个唯一的编号,从1开始递增。通过控制`...

    迁移工具,用于mysql、oracle、sqlserver、db2等数据库数据表的相互转换

    迁移工具,用于mysql、oracle、sqlserver、db2等数据库数据表的相互转换

    数据库转换工具,可实现oracle,mysql,sqlserver,sybase,db2相互转换

    数据库转换工具,可实现oracle,mysql,sqlserver,sybase,db2相互转换

Global site tag (gtag.js) - Google Analytics