分页(oracle数据库)

分页(oracle数据库),oracle,request,paging,Oracle,Request,Paging,我需要从我的C代码中创建对oracle数据库的请求,它将为网站上的页面选择行。例如,我想在第二页中获取从100到200的行。 我找到了一些真正有用的代码 SELECT * FROM ( SELECT a.*, rownum r__ FROM ( SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%' ORDER BY OrderDate DESC, ShippingDate DESC ) a WHERE

我需要从我的C代码中创建对oracle数据库的请求,它将为网站上的页面选择行。例如,我想在第二页中获取从100到200的行。 我找到了一些真正有用的代码

SELECT * FROM
(
   SELECT a.*, rownum r__
   FROM
   (
      SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%'
      ORDER BY OrderDate DESC, ShippingDate DESC
   ) a
   WHERE rownum < ((pageNumber * pageSize) + 1 )
)
WHERE r__ >= (((pageNumber-1) * pageSize) + 1)
但是它是如何工作的呢?我不明白。我熟悉SQL请求,但什么是

SELECT a.*, rownum r__  
这是什么

 ) a
从包装开始


您能给我解释一下这个包装吗?

选择一个*,rownum->选择表/表别名a中的所有记录,以及rownumber,这样您就可以选择一个子集了

从CustomerID为“A%”的订单中选择* 订单按订单日期描述,发货日期描述a

创建“a”作为表别名,允许您将其视为外部选择表中的表


请注意,select*被认为是一种不好的做法,因为更改表结构可能会破坏代码。

有关select*的好主意会在更改表结构时破坏代码。谢谢你的回答。一切都变得更加清晰=设置optimizer\u mode=FIRST\u ROWS也会让您受益匪浅。为此,我还建议查看分析函数row_number。
 ) a