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

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

因此,我想在Oracle DB中选择一个行的范围。我需要这样做,因为我在表中有数以百万行的行,并且我希望将结果分页给用户(如果您知道在客户端进行分页的另一种方法,我将使用JavaFX(如果重要的话),但我不认为通过网络发送所有数据以在客户端分页是个好主意)。

所以在读了这篇文章之后:SQL ROWNUM如何返回特定范围之间的行,我有以下查询:

Select * From (Select t.*, rownum r from PERSON t) Where r > 100 and r < 110;

这个100110只是个例子。在应用程序中,我只需要一个下限,并添加一个10_000的大小来获取下一个10,000行。

现在,rownum列出现在结果中,我不想看到它。由于我对SQL不太熟悉,下面是我的问题:

  1. 为什么(这是我第一次尝试,直到我搜索到)

    Select * From Person Where rownum > 100 and rownum < 110;

    返回0行?
  2. 为什么没有简单的方法Select ... FROM ... WHERE rownum BETWEEN lowerBound AND upperBound ?

  3. 如何摆脱r列中的结果值?从那里SQL从表A中排除使用select*[除Columna]的列?显然,我需要创建一个视图或临时表,但是还有其他方法考虑我的查询吗?

  4. 它能确保正确的分页吗?我读这篇文章“ROWNUM分页”一节,即我应该通过一些唯一的方法对值进行排序,以获得一致的分页(所以我猜排序是rownum很好,如果你能确认的话)。难道它不辜负使用的目的吗?FIRST_ROWS(N)?

我希望这不是太多,我可以把它们分成不同的问题,但我认为让它们崩溃是相关的,因为它们是密切相关的。

谢谢:)


元芳怎么了
浏览 400回答 3
3回答

小怪兽爱吃肉

问题2的回答:在Oracle 12中,您可以使用分页select&nbsp;owner,&nbsp;object_name,&nbsp;object_idfrom&nbsp;torder&nbsp;by&nbsp;owner,&nbsp;object_name OFFSET&nbsp;5&nbsp;ROWS&nbsp;FETCH&nbsp;NEXT&nbsp;5&nbsp;ROWS&nbsp;ONLY;

MMTTMM

我通常编写这样的查询:select&nbsp;*&nbsp;from&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;a.*,&nbsp;rownum&nbsp;as&nbsp;rn&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;table_name&nbsp;a&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;rownum&nbsp;<=&nbsp;110)where&nbsp;rn&nbsp;>&nbsp;100
打开App,查看更多内容
随时随地看视频慕课网APP