CSDN博客

img rain_zhao

Oracle中的分页

发表于2004/10/18 14:38:00  409人阅读

如何在Oracle里实现类似SQL Server里top语法的分页查询,例如查询结果集的前10条,查询结果集的第10到第20条?

答案是使用子查询,并使用oracle的函数rownum,举例如下:

有一个用户表如下:

 

User (
 UserID NUMBER ( 10 ) NOT NULL,
 Status NUMBER ( 3 ),
 Email VARCHAR2 ( 256 ) NOT NULL,
 UserName VARCHAR2 ( 256 ),
 Password VARCHAR2 ( 256 ),
 CONSTRAINT PK_User_1 PRIMARY KEY (UserID)
)
要求查询状态为1的按姓名排序的前10个用户,SQL如下:
  select * from (select a.*,rownum rn from User a where a.Status=1 order by a.UserName)  
  where rn<=10

做法就是将我们的查询放到一个子查询里,同时多查询一个结果,就是行数,使用rownum

然后在外面的查询里对行数做where条件,根据需要查询不同的结果集,如果是前10条就是rn<=10,如果是10~20条就是rn<20 and rn>=10,等等

执行上述SQL查询会发现取出的10个结果未必是按UserName排序后的前10条,这是因为oracle的rownum函数实际产生的是一个伪列,其行号并不是完全按照结果集的顺序,具有一定的随机性,所以需要对上述语句做一些修改,使用row_number()函数,如下:

  select * from (select a.*,row_number() over (order by a.UserName) rn from User a where a.Status=1)  
  where rn<=10
阅读全文
0 0

相关文章推荐

img
取 消
img