oracle ROWNUM的使用

 

由于Oracle中没有像MySql中limit函数以及SQLServer中的top关键字等,所以只能通过伪列的方式去满足分页功能

ROWNUM的使用注意:

 

(1)对 <=  操作,rownum是支持的,表示输出结果的前XX条数据

 

SELECT ROWNUM,empno,ename,job FROM emp WHERE ROWNUM < 10;

 

(2)不能对ROWNUM进行>、=、>=、操作,否则无结果

SELECT ROWNUM,empno,ename,job FROM emp t  WHERE ROWNUM > 10;
SELECT ROWNUM,empno,ename,job FROM emp WHERE ROWNUM =10;
SELECT ROWNUM,empno,ename,job FROM emp WHERE ROWNUM >= 10;

这是因为:

1、ROWNUM是伪列,必须要要有返回结果后,每条返回记录就会对应产生一个ROWNUM数值;

2、ROWNUM是Oracle首先进行查询获取到结果集之后在加上去的一个伪列,这个伪列对符合条件的结果添加一个从1开始的序列号,第一条始终是1;

这样,当查询到第一条记录时,该记录的ROWNUM为1,但条件要求ROWNUM>1,因此不符合,继续查询下一条;因为前面没有符合要求的记录,因此下一条记录过来后,其ROWNUM还是为1,如此循环,就不会产生结果

 


则进行一下优化后可以进行(rownum作为子查询,并起别名):
SELECT * FROM (SELECT ROWNUM nums,emp.* FROM emp) WHERE nums > 10 ;
SELECT * FROM (SELECT ROWNUM nums,emp.* FROM emp) WHERE nums = 10 ;
SELECT * FROM (SELECT ROWNUM nums,emp.* FROM emp) WHERE nums > 5 AND nums <= 10;
select *
from (select rownum rno, t.* from emp t) t
where rno >= 100
and rno <= 200
order by t.logid desc;

(3)分页查询--以每页输出10个结果的方式分页输出:

select *
from (select a.*, rownum as rn
from (select * from emp ) a
where rownum <= 10)
where rn >= 1;

select *
from (select a.*, rownum as rn
from emp  a
where rownum <= 20)
where rn >= 11;

select *
from (select a.*, rownum as rn
from emp a)
where rn between 11 and 20;

--备份表/一次插入大数据

CREATE TABLE emp_bak AS SELECT * FROM emp;
INSERT INTO emp_bak SELECT * FROM emp;

转载于:https://www.cnblogs.com/yaojyhappy/p/9254959.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值