Oracle中实现MySql中limit+SqlServer分页+分页的存储过程 (转载)

DeepSeek PostgreSQL MySQL MariaDB Oracle SqlServer 数据库分页区别 索引优化-- 为排序字段和过滤条件创建索引-- 使用覆盖索引避免大OFFSET-- 不要这样做-- 应该这样做LIMIT 10;监控分页性能-- MySQL分页大小建议// 根据应用场景调整分页大小// Web页面:10-50条// 移动端:5-20条// API接口:50-200条// 数据导出:1000-5000条缓存策略// 缓存热门分页数据// 分页查询逻辑。 阅读详情

先说下 intersect和 minus    
    
    intersect运算
   
    返回查询结果中相同的部分。

    eg:各个部门中有哪些相同的工种
    select job from account
    intersect
    select job from research
    intersect
    select job from sales

minus运算(求差)
   
    返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。

    eg:有哪些工种在财会部中有,而在销售部中没有?
    exp:select job from account
    minus
    select job from sales

第一种:

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 页大小 *
FROM
Users
WHERE
(ID NOT IN (SELECT TOP ( 页大小 *( 页数 -1)) ID FROM Users ORDER BY ID DESC))
ORDER BY
ID DESC
注:页大小指的是每页显示的条数。黄底部分是需要用程序运算后的一个数字。



千万级数据分页的存储过程:
引用自:http://blog.youkuaiyun.com/leizhipan/archive/2006/10/01/1313507.aspx

/*
   经测试,在 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

智能环境感知:STM32多传感器数据融合与报警策略设计 本文详细介绍了基于STM32的多传感器数据融合系统设计,整合DHT11温湿度传感器、MQ-2烟雾检测和光照强度检测模块,通过智能算法实现环境感知与动态报警。系统采用数据滤波、多传感器校验和自适应阈值策略,显著提升监测精度与可靠性,并通过OLED显示屏提供清晰的多级报警界面。 阅读详情

相关推荐

一口气看完TransformerXL详细解释带代码一:相对位置编码

相对位置编码(Relative Position Encoding)是Transformer模型中用于捕捉序列元素间相对位置关系的一种方法,与绝对位置编码(如BERT中的固定位置嵌入)不同,它直接建模元素之间的相对距离,从而更灵活地处理长序列或不同长度的序列。1. 为什么需要相对位置编码?​。

m0_73426548的博客 1426

Oracle实现limit

一、背景 oracle数据库不支持mysql、postgresql的limit功能,但是可以通过rownum(oracle系统顺序分配为从查询返回的行的编号,从1开始排)来限制返回结果集的行数,达到同样的效果。 二、用法 -- 查询前10行记录 select * from XXX where rownum <= 10 -- 查询从10行到20行的记录 select * from XXX where rownum < 21 minus select * from XXX where r

云在青天水在瓶 4万+

手把手教你用vLLM在昇腾910B上部署Qwen3-Embedding-8B模型(保姆级避坑指南)

本文详细介绍了如何在昇腾910B芯片上使用vLLM推理引擎部署Qwen3-Embedding-8B模型的全流程,包括环境准备、vLLM-ascend定制化安装、模型获取与校验、环境变量配置、服务启动参数优化、性能压测及生产级部署建议。特别针对昇腾生态的开发者,提供了保姆级的避坑指南和实用技巧,帮助实现高效稳定的模型部署。

weixin_28726671的博客 464

sql/oracle数据库之limit及示例

limit limit m:返回前m条语句(可用于按顺序排列之后查找前几名的数据等场景使用) limit n,m:表示跳过n条语句之后,按顺序再返回m条语句(可用于查找排名第二的数据等场景使用) 示例: 如下为举例所用的数据表test_1的表结构: 一、查找单次薪水最高的三个人: select * from test_1 order by salary desc limit 3 输出: 二、查找按薪水排名第三的人: select * from test_1 order by salary de

yinjieer379的博客 5651

用户存续期价值评估(CLV) 一

用户存续期价值评估(CLV) 1 一. 定义 ​     用户存续期价值(Customer Lifetime Value),也可称为CLTV、LCV或者LTV,是企业对未来一个客户与其的关系所带来的净收益的预测。这个预测模型可以有不同水平的复杂度和精确度,从一个直观感觉到使用复杂的预测技术。CLV可以被简单理解为客户关系的价值,也就是未来由于与客户的关系所带...

weixin_43171270的博客 8026

加密视频如何破解 如何解除机器码绑定的视频

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 如何破解加密...

Q-980767270的博客 5万+

MySQL Oracle中的“limit”功能

SQL中的limit limit 作用是限制SQL语句的返回结果数量,常用语分页查询 limit 语法格式: select * from tableName limit i,n i:查询结果的开始的索引值(缺省为0)。i=0可省去 i. n:为查询结果返回的数量 mysql的索引从0开始。 例子: select * from liuyan limit 0,5; 获得的数据索引为:0,1,2,3,4 select * from liuyan limit 5,5; 数据的索引为:5,6,7,8,9

weixin_43887870的博客 8214

代码实现ROS2bag录制数据和回放数据(C++)

ROS2的ROS2bag功能可以将指定Topic中的数据以.db3的格式(不同于ROS)保存到本地文件中。读取文件数据可以实现数据回放。

m0_57124501的博客 3256

oracle mysql limit用法_sql中limit使用方法

1、下面是几种limit的方法:原则看看下面几个例子应该就懂了在数据库中很多地方都会用到,比如当你数据库查询记录有几万、几十万时使用limit查询效率非常快,只需要查询出你需要的数据就可以了·再也不用全表查询导致查询数据库崩溃的情况。select * from Customer LIMIT 10;--检索前10行数据,显示1-10条数据select * from Customer LIMIT 1,...

weixin_39892447的博客 9704

scratch航天梦主题课程作品分享,包含ppt、素材包

而今年多国都将发射探测器尝试登陆月球,2023年或将称为“登月年”,请大家发挥创新思维,以“星辰大海”为创作主题,搜集相关信息 、展开联想,为实现升空 、探测 、取样贡献创意!即使去淘宝买的素材,也要从百度网盘,但素材太多大了或者太多文件,也要充值百度网盘超级会员才能保存,提高下载速度。同学们大家好,今天我们就要开始航天主题-嫦娥五号探月工程系列的编程课程了,不仅可以学习到很多航天知识,了解本次嫦娥五号的发射历程,还能让我们用编程遨游太空呢。即使下载了,也要上传,不是特别方便,尤其是不好查找。

少儿编程吕口口 2482

EndNote导入文献出现带有大括号{}乱码的解决办法

进入word中的Endnote工具栏——Bibliography Preferences(位于Bibliography区块的右下角),就是那个输入杂志名的小三角形,在Temporary citation delimiters处修改变量的默认符号。将默认的大括号{}修改为文章中不回使用到的符号。原因:因为Endnote插入的参考文献在Word中的代码就是以大括号隔开的,当文章中出现了该符号,endnote就会自动比对Library中的书目,而此时endnote出现错误。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 4万+

SQL中LIMIT的简单用法

通过本文的介绍,我们深入了解了LIMIT的用法,从基础的限制行数到与ORDER BYOFFSET的组合运用,以及在复杂查询中的灵活应用。通过这些例子,相信你已经对LIMIT有了更清晰的认识,能够在实际应用中更好地运用它来满足你的需求。希望这篇博客为你打开了 SQL 中LIMIT的神秘面纱,让你在数据的世界中更加游刃有余。在编写 SQL 查询时,记得发挥LIMIT的威力,让数据为你所用!

繁依Fanyi的博客 1560

CATIA二次开发核心技术:多实体零件自动化拆解与装配生成深度解析(零件转产品)

CATIA二次开发核心技术:多实体零件自动化拆解与装配生成深度解析

KE17RS的博客 2145

【mysql】limit实现分页

分页 1. 使用limit实现数据的分页显示 需求1:每页显示20条记录,此时显示第1页 SELECT employee_id,last_name FROM employees LIMIT 0,20; 需求2:每页显示20条记录,此时显示第2页 SELECT employee_id,last_name FROM employees LIMIT 20,20; 需求3:每页显示20条记录,此时显示第3页 SELECT employee_id,last_name FROM employees LI

兮动人 2万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Oracle和MYSQL和SQLServer的分页

Oracle和MYSQL和SQLServer的分页加存储过程: Oracle的分页是利用rownum关键字来进行分页的,实际上是将rownum查出来的数据作为一个新的数据源来进行再次查询也就是子查询,详情看代码: -- oracle 分页 select * from (select rownum rn , tt.* from T_LOGIN1 tt where rownum<=...

h_j_c_123的博客 423

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Mysql 分页语句Limit用法

1、Mysql的limit用法   在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。   Sql代码   SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset     LIMIT 子句可以被用于强制 SELECT

wy2321067543的博客 5280

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Mysql和Oracle以及SqlServer的分页查询如何实现

一、MySql中的limit SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。 LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。 如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT #

weixin_43729854的博客 365

Oracle、MySQL、SQLServer实现分页

面试被问到Oracle分页是如何实现的,巩固一下吧 ---------------------------------------------------------------- 一、Oracle分页 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNU

HackAge4619的博客 697

Oracle、MySQL、sqlserver、PG数据库分页实现方案总结

概述 今天主要总结一下Oracle、MySQL、sqlserver、PG数据库在分页上的一些实现方案及对比,仅供参考。 一、Oracle分页实现 oracle的分页一共有三种方式,但在Oracle中实现分页的方法主要是用ROWNUM关键字和用ROWID关键字两种。 Rownum 和 Rowid是Oracle数据库所特有的,通过他们可以查询到指定行数范围内的数据记录。 1、根据rowid来分 Oracle使用rowid数据类型存储行地址,rowid是物理存在的,实际存在的一个列,是一种数据类型。 基于64为编

淡定波的博客 2453

Oracle、MySql、SQLServer 数据库分页查询语句

(一)、** mysql的分页查询** mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: /* * sql:可以是单表的查询语句,也可以是多表的联合查询语句 * firstIndex:其实的索引 * pageSize:每页显示的记录数 */ select o.* from (sql) o limit firstIndex,pageSize 如下面的截图,每页...

Camel 4288

SQL分页查询的写法总结-MySQL、SQL Server、Oracle

MySQL的分页实现是使用LIMIT关键字。Oracle的分页是实现主要是基于rownum行号。SQL Server的分页主要使用的关键字是TOP。

JavaAndLI的博客 1万+

Oracle、 Mysql 、 SQLserver 分页查询

首先拿出数据库中的前40条记录的id值,然后再拿出剩余部分的前10条元素 第二种方法: 还是以上面的结果为例,采用另外的一种方法 --数据的意思和上面提及的一样 select top 10 * from test where id > ( select isnull(max(id),0) from ( select top 40 id from test order by id ) A ) order by id。上面给出的这个分页查询语句,在大多数情况拥有较高的效率。

2301_78145658的博客 694

MySql、SQLServer、Oracle 数据分页查询

MySql、SQLServer、Oracle 数据分页查询 (一)、 mysql的分页查询 mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: – sql:可以是单表的查询语句,也可以是多表的联合查询语句 – firstIndex:开始的索引(一般需要加一,从0开始) – pageSize:每页显示的记录数 select * from (sql) limit...

weixin_43287508的博客 533

Oracle,MySQL,sqlServer分页功能的写法

1.Oracle,MySQL,sqlServer写法的异同点,分页功能 MySQL用limit分页 select * from (select * from Student) limit 0,20; //取1-20条数据 select * from (select * from Student) limit 20,20; //取21-40条数据 第二种 写法 select...

weixin_41697424的博客 415

mysql oracle sqlserver分页,SQLServer,MySQL,Oracle 数据库分页 (转)

原文:SQL Server关于分页 SQL的资料许多,有的使用存储过程,有的使用游标。本人不喜欢使用游标,我觉得它耗资、效率低;使用存储过程是个不错的选择,因为存储过程是颠末预编译的,执行效率高,也更灵活。先看看单条SQL 语句的分页 SQL 吧。方法1:适用于 SQL Server 2000/2005SELECT TOP 页大小 * FROM table1 WHERE id NOT IN ( S...

weixin_33610780的博客 178

mysql分页 & oracle分页 & sqlserver分页

分页:5变量(属性) 数据总数 (select count(*) from xxx , 查数据库) 页面大小(页面容量,每页显示的数据条数) (用户自定义) 总页数 (自动计算) 当前页码 (用户自定义) 实体类对象集合(当前页的数据集合):依赖于数据库 (查数据库) 假设: 每页显示10条(页面大小=10) 总页数的计算: 800:10= 80页 -...

Mercuriooo的博客 462
上一篇: 用maven构建java project
下一篇: jquery post 乱码 提交到struts2 中文乱码
lb8607
博客等级 码龄18年 17粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值