ROWNUM在分页查询中是如何工作的?
因此,我想在Oracle DB中选择一个行的范围。我需要这样做,因为我在表中有数以百万行的行,并且我希望将结果分页给用户(如果您知道在客户端进行分页的另一种方法,我将使用JavaFX(如果重要的话),但我不认为通过网络发送所有数据以在客户端分页是个好主意)。
所以在读了这篇文章之后:SQL ROWNUM如何返回特定范围之间的行,我有以下查询:
Select * From (Select t.*, rownum r from PERSON t) Where r > 100 and r < 110;
这个100
和110
只是个例子。在应用程序中,我只需要一个下限,并添加一个10_000的大小来获取下一个10,000行。
现在,rownum列出现在结果中,我不想看到它。由于我对SQL不太熟悉,下面是我的问题:
- 为什么(这是我第一次尝试,直到我搜索到)
Select * From Person Where rownum > 100 and rownum < 110;
返回0行? 为什么没有简单的方法Select ... FROM ... WHERE rownum BETWEEN lowerBound AND upperBound
?
如何摆脱r
列中的结果值?从那里SQL从表A中排除使用select*[除Columna]的列?显然,我需要创建一个视图或临时表,但是还有其他方法考虑我的查询吗?
它能确保正确的分页吗?我读这篇文章“ROWNUM分页”一节,即我应该通过一些唯一的方法对值进行排序,以获得一致的分页(所以我猜排序是rownum
很好,如果你能确认的话)。难道它不辜负使用的目的吗?FIRST_ROWS(N)
?
我希望这不是太多,我可以把它们分成不同的问题,但我认为让它们崩溃是相关的,因为它们是密切相关的。
谢谢:)