共计 3227 个字符,预计需要花费 9 分钟才能阅读完成。
行业资讯
数据库
Oracle 分页 + 付上 Sql Server 分页 + 千万级数据分页的存储过程是怎样的
这篇文章给大家介绍 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
minus
SELECT * FROM table WHERE ROWNUM
第四种
可以用变通一点的办法,我给个示例:
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
但是下面的语句是不对的:
SELECT * FROM table WHERE ROWNUM 90 AND ROWNUM
这是因为 Oracle 认为这个条件不成立,所以没有返回。
你应该这样写:
SELECT * FROM table WHERE ROWNUM
minus
SELECT * FROM table WHERE ROWNUM
其他数据库模拟实现 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 /*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 分页 + 千万级数据分页的存储过程是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。