Oracle分页(limit方式的运用)+付上SqlServer分页+千万级数据分页的存储过程
来源:互联网 发布:淘宝上货到付款靠谱吗 编辑:程序博客网 时间:2024/05/14 06:39
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;
...
}
其中第二种是非常成熟的分页
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 分页
千万级数据分页的存储过程:
引用自: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)
作 者: 铁拳
邮 箱: sunjianhua_kki@sina.com
创建时间: 2004-07-04
修改时间: 2004-07-04
*/
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分页(limit方式的运用)+付上SqlServer分页+千万级数据分页的存储过程
- Oracle分页(limit方式的运用)+付上SqlServer分页+千万级数据分页的存储过程
- 实现千万级数据分页的存储过程!
- 实现千万级数据分页的存储过程
- 实现千万级数据分页的存储过程!
- 实现千万级数据分页的存储过程!
- 实现千万级数据分页的存储过程!
- 实现千万级数据分页的存储过程!
- 实现千万级数据分页的存储过程
- 实现千万级数据分页的存储过程!
- 实现千万级数据分页的存储过程!
- 实现千万级数据分页的存储过程
- 实现千万级数据分页的存储过程!
- 实现千万级数据分页的存储过程!
- 实现千万级数据分页的存储过程!
- 实现千万级数据分页的存储过程
- 实现千万级数据分页的存储过程
- ( 转 ) 实现千万级数据的分页的通用存储过程
- 服务器变慢的两种非常规解决办法
- 设计模式学习与实践(十六)----不变模式(immutable)
- JProfiler使用入门(一)——准备工作
- HP-UX服务器管理的两套指令
- EDMA Channel Parameter Entries
- Oracle分页(limit方式的运用)+付上SqlServer分页+千万级数据分页的存储过程
- C语言中的宽字符与多字节字符[转]
- Oracle按时间段分组统计
- 利用JProfiler对应用服务器内存泄漏问题诊断一例(转)
- 设计模式学习与实践(十七)----策略模式(strategy)
- asp.net数据导出到word
- 《高质量程序设计指南》-------new三种使用方式
- ORACLE的表分析策略
- pku 2418 (二叉排序树)