oralce中的rownum的用法

上一篇 / 下一篇  2012-02-02 11:23:54 / 个人分类:SQL语句

在ORACLE中实现SELECT TOP N 由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。

1、Rownum的意义

批注:rowid也是伪列。只不过是在插入数据库时,该值就确定了,有18长度的字符串
因为ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列(强调:先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值。

所以:

例子:

select rownum,a.* from zj_jzxx a where rownum =1

select rownum,a.* from zj_jzxx a where rownum =10 查不出数据的(非1)

select rownum,a.* from zj_jzxx a where rownum >5查不出数据的

select rownum,a.* from zj_jzxx a where rownum >0(所有数据)

select rownum,a.* from zj_jzxx a where rownum <5(前4条)

即:rownum是每个查询结果中的一个默认字段

2、查出前n条记录中的第m条信息

格式:

SELECT 列名1...列名n FROM

(

SELECT ROWNUM RECNO, 列名1...列名nFROM

(SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n)

WHERE ROWNUM <= N(抽出记录数)

ORDER BY ROWNUM ASC

)

WHERE RECNO = M(M <= N)

例子:

查出第三行的数据

select rownum,b.* from

(selectrownum recno,a.* from (select * from zj_jzxx  order by jzrq desc) a

where rownum<= 3 order by rownum asc) b

Where recno = 3

3、查出 第 n到m行的信息

格式:

SELECT * FROM
      (
      SELECT A.*, rownum r
      FROM
           (
           SELECT *
           FROM Articles
           ORDER BY PubTime DESC
           ) A
      WHERE rownum <= n      ) B
WHERE r > m;

例子:

查出第8到10行的数据

select rownum,b.* from

(select rownum recno,a.* from (select * from zj_jzxx  order by jzrq desc) a

where rownum<= 10 order by rownum asc) b

where recno > 7

或者:

select rownum,b.* from

(select rownum recno,a.* from (select * from zj_jzxx  order by jzrq desc) a

where rownum<= 10 order by rownum asc) b

where recno between 8 and 10


TAG: SQL sql

 

评分:0

我来说两句

日历

« 2024-05-04  
   1234
567891011
12131415161718
19202122232425
262728293031 

我的存档

数据统计

  • 访问量: 18335
  • 日志数: 22
  • 建立时间: 2012-02-02
  • 更新时间: 2012-02-29

RSS订阅

Open Toolbar