ROWNUM

最近更新时间: 2024-10-17 17:10:00

ROWNUM是Oracle中对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说 ROWNUM是对符合条件结果的序列号。它总是从1开始排起的。

TDSQL PG支持ROWNUM伪列用法。

使用限制

使用ROWNUM时需要注意事项:

  • ROWNUM是数据库从数据文件或缓冲区中读取数据的顺序,所以rownum>n(n>=1)、rownum between n(n>1) and m是得不到数据的。

  • 不能使用ROWNUM做为字段名称。

语法

SELECT [ROWNUM,]column1,... FROM table1...WHERE ROWNUM [< |<= ] n [ and ...];

示例

postgres=# create table t1(f1 int,f2 varchar2(16));
CREATE TABLE
postgres=# insert into t1 values (1,'ONE');
INSERT 0 1
postgres=# insert into t1 values (2,'TWO');
INSERT 0 1
postgres=# insert into t1 values (3,'THREE');
INSERT 0 1
postgres=# insert into t1 values (4,'FOUR');
INSERT 0 1
postgres=# insert into t1 values (5,'FIVE');
INSERT 0 1
postgres=# insert into t1 values (6,'SIX');
INSERT 0 1
postgres=# insert into t1 values (7,'SEVEN');
INSERT 0 1
postgres=# select * from t1 order by f1;
 f1 |  f2   
----+-------
  1 | ONE
  2 | TWO
  3 | THREE
  4 | FOUR
  5 | FIVE
  6 | SIX
  7 | SEVEN
(7 rows)

postgres=# select rownum,f1,f2 from t1 where f1>5;
 rownum | f1 |  f2   
--------+----+-------
      1 |  6 | SIX
      2 |  7 | SEVEN
(2 rows)

ROWNUM从1开始。

postgres=# select rownum,f1,f2 from t1 where rownum<2; 
 rownum | f1 | f2  
--------+----+-----
      1 |  1 | ONE
(1 row)
只显示一行数据。

postgres=# select rownum,f1,f2 from t1 where rownum>=1;
 rownum | f1 |  f2   
--------+----+-------
      1 |  1 | ONE
      2 |  2 | TWO
      3 |  5 | FIVE
      4 |  6 | SIX
      5 |  3 | THREE
      6 |  4 | FOUR
      7 |  7 | SEVEN
(7 rows)
显示全部数据。

postgres=# select rownum,f1,f2 from t1 where rownum between 1 and 2;  
 rownum | f1 | f2  
--------+----+-----
      1 |  1 | ONE
      2 |  2 | TWO
(2 rows)

postgres=# select rownum,f1,f2 from t1 where rownum between 2 and 3; 
 rownum | f1 | f2 
--------+----+----
(0 rows)

rownumbetween 如果大于1,查询结果为空,因为ROWNUM总是从1开始。