> 文章列表 > oracle数据库rownum

oracle数据库rownum

oracle数据库rownum

什么是oracle数据库rownum

在Oracle数据库中,rownum是一个非常有用的功能,它可以帮助我们筛选出我们想要的行。rownum是一个伪列,它不是真实的表列,而是Oracle使用的一个技巧,用来给每一行分配一个唯一的行号,这个行号是在检索出数据的时候给出的。rownum获得了Oracle表的物理行号,而不是根据排序结果行得到的行号。

rownum的作用与使用

rownum可以用在where语句中,以筛选出特定的数据。例如,我们可以使用SELECT语句来获得前10行数据:

SELECT * FROM table1 WHERE rownum < 11;

这个命令将输出前10条记录。如果我们想要选择第11到20条记录,我们可以使用以下命令:

SELECT * FROM     (SELECT * FROM table1 WHERE rownum < 21) WHERE rownum > 10;

请注意,我们需要使用嵌套的SELECT来获得最终结果。否则,rownum < 21这个条件可以阻止我们获得所有的记录。

rownum的局限性

尽管rownum是一个非常有用的工具,但它也有一定的局限性。例如,我们不能在嵌套的SELECT语句中使用聚合函数。下面的查询会失败:

SELECT COUNT(*) FROM     (SELECT * FROM table1 WHERE rownum < 11);

此时,我们必须使用普通的SELECT语句来获取结果,然后再使用count函数。我们还不能在子查询中使用order by语句,因为这会改变检索出来的数据的行号位次。我们可以在最外层的SELECT语句中使用order by语句。

rownum和分页

rownum也可以用来分页,因为我们可以选择指定前面的行号,在这个行号之后的行都被选择。如果我们想要使用rownum来分页,我们可以使用下面的查询来获取特定页上的数据:

SELECT * FROM     (SELECT a.*, ROWNUM rn FROM (SELECT * FROM table1 ORDER BY id) a WHERE ROWNUM <= :pageIndex * :pageSize)     WHERE rn > (:pageIndex - 1) * :pageSize;

请注意,我们使用嵌套的SELECT来获取分页。内部的查询使用window函数将行号分配给每一行,在外部查询中,我们只返回需要的行。

总结

rownum是Oracle数据库中一个非常实用的功能。它可以用来获取特定的记录,也可以用来分页。但是,它也有一些局限性,我们需要注意。