加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle ROWNUM的使用

发布时间:2020-12-12 13:32:01 所属栏目:百科 来源:网络整理
导读:? 由于Oracle中没有像MySql中limit函数以及SQLServer中的top关键字等,所以只能通过伪列的方式去满足分页功能 ROWNUM的使用注意: ? (1)对 = ?操作,rownum是支持的,表示输出结果的前XX条数据 ? SELECT ROWNUM,empno,ename,job FROM emp WHERE ROWNUM 10;

?

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

ROWNUM的使用注意:

?

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

?

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

?

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

SELECT ROWNUM,job FROM emp t ?WHERE ROWNUM > 10;
SELECT ROWNUM,job FROM emp WHERE ROWNUM =10;
SELECT ROWNUM,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 (select * from emp?) a
where rownum <= 20)
where rn >= 11;

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读