Oracle分页+付上Sql Server分页+千万级数据分页的存储过程是怎样的

发布时间:2021-10-13 09:21:34 作者:柒染
来源:亿速云 阅读:189

这篇文章给大家介绍Oracle分页+付上Sql Server分页+千万级数据分页的存储过程是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

select * from a_matrix_navigation_map
where rowid not in(select rowid from a_matrix_navigation_map where rownum<=0) and rownum<=10

第二种:

SELECT * FROM
(
SELECT A.*, rownum r
FROM
(
SELECT *
FROM a_matrix_navigation_map

) A
WHERE rownum <= 10
) B
WHERE r > 0

第三种

SELECT * FROM table WHERE ROWNUM<101;
minus
SELECT * FROM table WHERE ROWNUM<91;
第四种

可以用变通一点的办法,我给个示例:

sql = "select a_id,a_title,a_author,aID,a_time,a_readtime,sID from article order by a_id";

int a;
while (rs.next()) {
a++;
if (a=ipage+spage)continue;
...
} 其中第二种是非常成熟的分页 我的实例~ 即可实现 类似limit 功能$bandanspager="select * from abc t2,abc1 t1 where t1.id=t2.id group by t1.id";    $sql=" SELECT * FROM          (             SELECT A.*, rownum r             FROM             ( ".$bandanspager.") A            WHERE rownum <= 10          ) B

         WHERE r > 0

 

 

Oracle不支持类似于 MySQL 中的 limit. 但你还是可以rownum来限制返回的结果集的行数.

如果你只希望返回前十行纪录,你可以这样写:

SELECT * FROM table WHERE ROWNUM<10;

但是下面的语句是不对的:

SELECT * FROM table WHERE ROWNUM>90 AND ROWNUM<100;

这是因为 Oracle 认为这个条件不成立,所以没有返回。
你应该这样写:

SELECT * FROM table WHERE ROWNUM<101;
minus
SELECT * FROM table WHERE ROWNUM<91;

 

其他数据库模拟实现mysql的limit语法

假如我有个user表,我想查询符合某些条件的第50个用户开始的10个用户,且不能使用id号between and那样查询,应该怎么写SQL语句?

  在mysql数据库中有limit,offset语句可以方便的实现,那么在SQL server中呢?SQL Server是否支持limit和offset语句呢?

select top 10 * from
(select top 60 * from [user] order by userid) aa
order by userid desc

  oracle,如果想从表中取出按照某字段排序前M到N条记录

  下面的ORACLE语句是最好的:

SQL> select ID from
     (
       select ID , rownum as con from
       (
        select ID from TestSort order by ID
       )
       where rownum <= 3   /*N值*/
     )
     where con >= 2; /*M 值*/
ID
----------
         2
         3

 


 

SqlServer分页:

一条SQL语句搞定Sql Server 2000 分页

Sql Server 2000 的分页方案大多采用存储过程来完成,存储过程书写比较复杂,在参考了ITPUB网站上众多网友的意见后用一条SQL语句就可以实现分页功能。SELECT TOP 页大小 *FROMUsersWHERE(ID NOT IN (SELECT TOP (页大小*(页数-1)) ID FROM Users ORDER BY ID DESC))ORDER BYID DESC注:页大小指的是每页显示的条数。黄底部分是需要用程序运算后的一个数字。

千万级数据分页的存储过程:
引用自:Oracle分页(limit方式的运用)+付上SqlServer分页+千万级数据分页的存储过程

/*
   经测试,在 14483461 条记录中查询第 100000 页,每页 10 条记录按升序和降序第一次时间均为 0.47 秒,第二次时间均为 0.43 秒,测试语法如下:
  exec GetRecordFromPage news,newsid,10,100000
   news 为 表名, newsid 为关键字段, 使用时请先对 newsid 建立索引。
*/

/*
函数名称: GetRecordFromPage
函数功能: 获取指定页的数据
参数说明: @tblName      包含数据的表名
           @fldName       关键字段名
           @PageSize     每页记录数
           @PageIndex    要获取的页码
           @OrderType    排序类型, 0 - 升序, 1 - 降序
           @strWhere     查询条件 (注意: 不要加 where)



*/
CREATE PROCEDURE GetRecordFromPage
    @tblName      varchar(255),       -- 表名
    @fldName     varchar(255),       -- 字段名
    @PageSize     int = 10,           -- 页尺寸
    @PageIndex    int = 1,            -- 页码
    @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
    @strWhere     varchar(2000) = '' -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL   varchar(6000)       -- 主语句
declare @strTmp   varchar(1000)       -- 临时变量
declare @strOrder varchar(500)        -- 排序类型

if @OrderType != 0
begin
    set @strTmp = '<(select min'
    set @strOrder = ' order by [' + @fldName + '] desc'
end
else
begin
    set @strTmp = '>(select max'
    set @strOrder = ' order by [' + @fldName +'] asc'
end

set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
     + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
    + @strOrder

if @strWhere != ''
    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
        + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
        + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

if @PageIndex = 1
begin
    set @strTmp = ''
    if @strWhere != ''
        set @strTmp = ' where (' + @strWhere + ')'

    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + ']' + @strTmp + ' ' + @strOrder
end

exec (@strSQL)

GO

关于Oracle分页+付上Sql Server分页+千万级数据分页的存储过程是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. 如何实现PL/SQL中编写Oracle数据库分页的存储过程
  2. 实现小数据量和海量数据的通用分页显示存储过程(转)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

oracle sql server

上一篇:Spring Cloud Alibaba与Spring Boot、Spring Cloud以及组件对应的版本关系是什么

下一篇:Android如何实现ProgressBar进度条和ProgressDialog进度框

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》