orcale rownum 分页查询的数据顺路混乱

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了orcale rownum 分页查询的数据顺路混乱相关的知识,希望对你有一定的参考价值。

select rownum ,a.* from vw_pricelist_bug_rownum a where
rownum>=0 and rownum <=10
第一查询有莲花白。

select rownum ,a.* from vw_pricelist_bug_rownum a where
rownum <=10
第二次查询没有莲花白。
请问各位高手,知道这是什么原因吗?
orcale rownum 分页查询的数据顺序混乱
我想知道,为什么这两个查询的结果会不一样。原因。

参考技术A 给你一个例子(至少应该是两层查询,注意里面一层用<=,外面一层用 >=):

SELECT *
FROM (SELECT ROWNUM AS rowno, t.*
FROM emp t
WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
AND TO_DATE ('20060731', 'yyyymmdd')
AND ROWNUM <= 20) table_alias
WHERE table_alias.rowno >= 10;追问

我想知道,为什么这两个查询的结果会不一样。原因。

追答

ruwnum 是什么 ?

是返回数据的结果集中,数据的行号?这么说应该没有问题吧。

你没有排序,谁能保证,你每次查询的 的 结果集中 的数据 顺序 收一致。

总之,你就不能那样用。

参考技术B Oracle中的rownum的是在取数据的时候产生的序号。

数据库分页查询

分页语句:

Oracle:

--这样的分页查询方式不不过针对单表的简单查询,对于最内层查询是复杂的

--多表联合查询或最内层查询包括排序的情况一样有效

SELECT?*?FROM?(?

SELECT?ROWNUM?RN?,?T.*??FROM?

(SELECT?*?FROM?FTNEMR.PATIENT_VISIT)?T?WHERE?ROWNUM?<=?40?)?

WHERE?RN?>=?21

ORDER?BY?PATIENT_ID;

--这样的方式比上面的方式要性能要低非常多

SELECT?*?FROM?(?

SELECT?ROWNUM?RN,?T.*?FROM?

(SELECT?*?FROM?FTNEMR.PATIENT_VISIT)?T?)?

WHERE?RN?BETWEEN?21?AND?40?

ORDER?BY?PATIENT_ID


SQL?Server:

--查询出第21条至第30条数据?--

SELECT?TOP?10?*?FROM?dbo.HIS_BA1???

WHERE?FID?NOT?IN(SELECT?TOP?20?FID?FROM?dbo.HIS_BA1?ORDER?BY?FID)


Mysql:

SELECT?*?FROM?table?LIMIT?5,10;?//?检索记录行?6-15

以上是关于orcale rownum 分页查询的数据顺路混乱的主要内容,如果未能解决你的问题,请参考以下文章

oracle 分页 使用rownum的分页方式

Oracle 分页查询rownum的用法

大数据oracle分页查询

Oracle之分页

oracle分页详解(rownum与orderby)

ROWNUM 在分页查询中如何工作?