图片 5

Oracle之分页

select * from(select row_number()
over(partition by IDCARD order by
DATATM desc) as rownum,*
from (SELECT
*
FROM
TABLENAME
)as H1
) as H where H.rownum =
1

在Oracle中有一个方法rownum用来查询第一行到第n行的内容,但没有一个合适的方法若查询第x行到第y行的内容,而在实际应用中却经常需要查询第x行到第y行的内容,这时我们就需要使用rownum和子表查询等内容来进行查询,因为这一块内容属于Oracle总的常用部分所以专门在此介绍。

1 引言

解释:红色为以什么分组   蓝色为以什么排序  紫色为表名  
目前是获取表中每个 IDCARD中时间最大的一条

rownum

在Oralce中有一个伪列rownum,其在创建表的时候就存在了却不显示,若要使用这个列可以直接调用即可,也可以对这个列添加别名来调用。

rownum只能用于显示小于某行的数据即第一行开始到你要查询到的那一行为止的数据。

rownum对于小于某值的查询条件

select * from emp where rownum<=3; 查询emp前三行记录

rownum对于等于某个值得查询条件

select * from emp where rownum=1; 显示第一行记录

图片 1

Oracle中的rownum一般是在实现分页查询时用到,虽然在我做的项目中只实现了分页显示而没有实现真正的分页,但是出于学习的目的研究了一下oracle的rownum。在使用查询语句时,我们经常要求返回表中的前n条记录或者是中间的几条记录,比如在一个大表(假设有10W条数据)要求查询从第1000到1005条的记录。面对这种查询,我们怎么办呢?mysql和oracle都有自己的解决办法。

 

分页

在Oracle把查询第几行到第几行的操作称为分页,其具体操作是通过子查询等操作完成。

select 列名 from (select 表名.*,rownum rn from 表名)表名  where rn操作;

思考如下:

1.选择所有内容

select * from emp;

2.显示rownum

select e.*,rownum rn from(select * from emp)e;

这一步可以精简为下面形式,但某些情况只能用上面那种

select emp.*,rownum rn from emp;

3.查询

select * from(select e.*,rownum rn from (select * from emp)e);

4.其他变化

select * from (select emp.*,rownum rn from emp)emp where rn=3;

查询第三行的信息

select * from(select e.*,rownum rn from (select * from emp)e where
rownum<=10) where rn>2;

查询第三到第十行信息。上面的也可以精简为

select * from(select emp.*,rownum rn from emp) where rn>2 and
rn<=10;

图片 2

在某些时候我们需要先对表的内容进行排序,随后查询第x行到第y行的内容,这个时候有一个需要注意的点是rownum是在表产生的时候产生的伪列,所以使用排序会连着rownum的值进行排序,从而达不到想要的效果。

select rownum,sal from emp order by sal;

图片 3

为了解决上述这个问题,我们需要使用子表查询即先排好序,再在新表之中显示rownum来规避这个问题。

select rownum,sal.* from (select sal from emp order by sal)sal;

图片 4

考虑到排序的问题,所以在上方第二步的时候使用第一种方法即select
e.*,rownum rn from(select * from emp)e;,在内表select * from
emp中进行排序可以完成在乱序中找到第x行到第y行的效果。

select * from(select e.*,rownum rn from(select * from emp order by
sal)e)where rn>=3 and rn<=8;

输出emp表薪资排名3到8的员工信息。

图片 5

如果我们是通过JDBC的方式访问数据库,那么就有必要根据数据库类型采取不同的SQL分页语句,对于MySql数据库,我们可以采用limit语句进行分页,对于Oracle数据库,我们可以采用rownum的方式进行分页.