Oracle之分页

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

rownum

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

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

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

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

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

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

分页

在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;

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

select rownum,sal from emp order by sal;

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

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

考虑到排序的问题,所以在上方第二步的时候使用第一种方法即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的员工信息。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 查询是数据的一个重要操作。用户发送查询请求,经编译软件变异成二进制文件供服务器查询,后返回查询结果集给用户,查询会...
    产品小正阅读 1,459评论 0 2
  • 幕课oracle学习笔记 --!!!scott用户 --一.分组查询 --1.常用的分组函数:AVG(平均数),S...
    xiaoxiao苏阅读 1,300评论 0 5
  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,838评论 0 2
  • 项目最近有用到从app自身跳转到微信第三方的功能,从网上看到了很多方法,暂时没有逐个去试,分享一个个人试过后可以使...
    trapQueen真好听阅读 4,027评论 0 2