rownum 是oracle提供的一个用来得到结果集每行的行号的伪列。
做如下测试:
一 当where 和 rownum 在同一行时 rownum不能和 > ,>= (>=1 可以) = 这些算术运算符连用,当使用分页查询时可以!
SQL> select rownum ,ename from emp where rownum >=1;
ROWNUM ENAME
---------- --------------------------------------------------
1 SMITH
2 ALLEN
3 WARD
4 JONES
5 MARTIN
6 BLAKE
7 CLARK
8 SCOTT
9 KING
10 TURNER
11 ADAMS
12 JAMES
13 FORD
14 MILLER
已选择14行。
返回全部的行。但是下面的会让你诧异不已吧,怎么没有数据?
SQL> select rownum ,ename from emp where rownum >5;
未选定行
SQL> select rownum ,ename from emp where rownum =5;
未选定行
SQL> select rownum ,ename from emp where rownum !=6;
ROWNUM ENAME
---------- --------------------------------------------------
1 SMITH
2 ALLEN
3 WARD
4 JONES
5 MARTIN
SQL> select rownum ,ename from emp where rownum <=5;
ROWNUM ENAME
---------- ----------
1 SMITH
2 ALLEN
3 WARD
4 JONES
5 MARTIN
已选择5行。
解释一下: 在使用rownum <=5 时,会发生下面的操作:
1 oracle 查询,
2 oracle取得第一个符合条件的行,并将该行的rownum 设为1
3 有5行了吗? 若没有,则继续取值,步骤 4 ,如果有5行 就不再取值了。
4 oracle 取下一行,行号递增。下一行的rownum为2,直到rownum 为5
5 返回 第三步。
在分析rownum>5或=5的情况的情况。因为第一行数据的rownum永远为1 ,所以不可能>5或=5,所以就没有结果了。
SQL> select rownum ,ename from emp where rownum=1;
ROWNUM ENAME
---------- --------------------------------------------------
1 SMITH --有结果
二 rownum 前面不能加表的别名
SQL> select e.rownum ,ename from emp e where rownum <=5;
select e.rownum ,ename from emp e where rownum <=5
*
第 1 行出现错误:
ORA-01747: user.table.column, table.column 或列说明无效
做如下测试:
一 当where 和 rownum 在同一行时 rownum不能和 > ,>= (>=1 可以) = 这些算术运算符连用,当使用分页查询时可以!
SQL> select rownum ,ename from emp where rownum >=1;
ROWNUM ENAME
---------- --------------------------------------------------
1 SMITH
2 ALLEN
3 WARD
4 JONES
5 MARTIN
6 BLAKE
7 CLARK
8 SCOTT
9 KING
10 TURNER
11 ADAMS
12 JAMES
13 FORD
14 MILLER
已选择14行。
返回全部的行。但是下面的会让你诧异不已吧,怎么没有数据?
SQL> select rownum ,ename from emp where rownum >5;
未选定行
SQL> select rownum ,ename from emp where rownum =5;
未选定行
SQL> select rownum ,ename from emp where rownum !=6;
ROWNUM ENAME
---------- --------------------------------------------------
1 SMITH
2 ALLEN
3 WARD
4 JONES
5 MARTIN
SQL> select rownum ,ename from emp where rownum <=5;
ROWNUM ENAME
---------- ----------
1 SMITH
2 ALLEN
3 WARD
4 JONES
5 MARTIN
已选择5行。
解释一下: 在使用rownum <=5 时,会发生下面的操作:
1 oracle 查询,
2 oracle取得第一个符合条件的行,并将该行的rownum 设为1
3 有5行了吗? 若没有,则继续取值,步骤 4 ,如果有5行 就不再取值了。
4 oracle 取下一行,行号递增。下一行的rownum为2,直到rownum 为5
5 返回 第三步。
在分析rownum>5或=5的情况的情况。因为第一行数据的rownum永远为1 ,所以不可能>5或=5,所以就没有结果了。
SQL> select rownum ,ename from emp where rownum=1;
ROWNUM ENAME
---------- --------------------------------------------------
1 SMITH --有结果
二 rownum 前面不能加表的别名
SQL> select e.rownum ,ename from emp e where rownum <=5;
select e.rownum ,ename from emp e where rownum <=5
*
第 1 行出现错误:
ORA-01747: user.table.column, table.column 或列说明无效