`
hanwei59
  • 浏览: 34466 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Oracle的rownum

    博客分类:
  • sql
阅读更多
  1. rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。
  2. rownum不能以任何基表的名称作为前缀。

按scott.emp为例:
按工资排序,并且以rownum作为序号
是这样写吗?
SQL> select rownum,emp.empno,emp.sal from emp order by sal;

    ROWNUM      EMPNO        SAL
---------- ---------- ----------
         1       7369        800
        12       7900        950
        11       7876       1100
         3       7521       1250
         5       7654       1250
        14       7934       1300
        10       7844       1500
         2       7499       1600
         7       7782       2450
         6       7698       2850
         4       7566       2975

    ROWNUM      EMPNO        SAL
---------- ---------- ----------
         8       7788       3000
        13       7902       3000
         9       7839       5000


让您失望了,rownum还是按自己的顺序。
应该这样写:

SQL> select rownum,e.empno,e.sal from (select * from emp order by sal) e;

    ROWNUM      EMPNO        SAL
---------- ---------- ----------
         1       7369        800
         2       7900        950
         3       7876       1100
         4       7521       1250
         5       7654       1250
         6       7934       1300
         7       7844       1500
         8       7499       1600
         9       7782       2450
        10       7698       2850
        11       7566       2975

    ROWNUM      EMPNO        SAL
---------- ---------- ----------
        12       7788       3000
        13       7902       3000
        14       7839       5000

已选择14行。


那么还想分页呢?再加一层子循环:

select rn,empno,sal from
(select rownum rn,t.* from 
(select * from emp order by sal,empno) t)
where rn between 2 and 7;

SQL> select rn,empno,sal from
  2  (select rownum rn,t.* from
  3  (select * from emp order by sal,empno) t)
  4  where rn between 2 and 7;

        RN      EMPNO        SAL
---------- ---------- ----------
         2       7900        950
         3       7876       1100
         4       7521       1250
         5       7654       1250
         6       7934       1300
         7       7844       1500

已选择6行。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics