对于rownum来说它是oracle系统挨次分配为年夜发芽返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制发芽返回的总行数,而且rownum不能以任何表的名称作为前缀。 举例声名:* a* c( B) @- F& N6 T
例如表:student(学生)表,表结构为:5 h! i5 w. v& O- e4 w: ^$ n' v
ID char(6) --学号2 C/ l6 g) E W' ~/ a
name VARCHAR2(10) --姓名8 D5 u6 `2 h/ ^- Q- ~2 e
create table student (ID char(6), name VARCHAR2(100));4 h, F( f" O$ O8 ^' Z
insert into sale values('200001',‘张一’);6 M0 \- Q3 F( T8 v; j8 E
insert into sale values('200002',‘王二’);
+ R9 u1 D" a3 q' p insert into sale values('200003',‘李三’);
6 b- a$ ~; s2 f5 _$ X% ^8 R insert into sale values('200004',‘赵四’);
# z0 q1 n0 ?3 U6 {4 p0 m commit;
9 g2 v7 h2 O- H' f+ P (1) rownum 对于等于某值的发芽前提& c) [# ]* p9 a" B7 `; a5 j [+ m
如不美观但愿找到学生表中第一条学生的信息,可以使用rownum=1作为前提。可是想找到学生表中第二条学生的信息,使用rownum=2结不美观查不到数据。因为rownum都是年夜1起头,可是1以上的自然数在rownum做等于判定是时认为都是false前提,所以无法查到rownum = n(n>1的自然数)。
% h( T9 s Z* i0 v SQL> select rownum,id,name from student where rownum=1;(可以用在限制返回记实条数的处所,保证犯警错,如:隐式游标)
P3 d, @/ q9 @# I SQL> select rownum,id,name from student where rownum=1;- W5 d' ] _, ^4 O/ O
ROWNUM ID NAME; d: N: m' I" k4 ?( ?. _
---------- ------ ---------------------------------------------------
9 B6 R" b5 Y6 G0 }2 ^ 1 200001 张一6 R1 h8 a2 i/ V8 Q
SQL> select rownum,id,name from student where rownum =2;3 B6 R8 o4 ]+ O2 K6 `! {
ROWNUM ID NAME
* N4 {+ S7 e g# Z ---------- ------ ---------------------------------------------------' U# V5 h4 x% x9 S
(2)rownum对于年夜于某值的发芽前提; |- h- t7 G! n% e2 c/ h
如不美观想找到年夜第二行记灌往后的记实,当使用rownum>2是查不出记实的,原因是因为rownum是一个老是年夜1起头的伪列,Oracle 认为rownum> n(n>1的自然数)这种前提依旧不成立,所以查不到记实
* a8 r. P+ @7 Y SQL> select rownum,id,name from student where rownum >2;# X0 _; v+ C5 Y( u: \' C' w
ROWNUM ID NAME3 G. U* t' A! W" @( F: S5 l S
---------- ------ ---------------------------------------------------' z% ^' ?- ~% z5 \, L
那若何才能找到第二行往后的记实呀。可以使用以下的子发芽体例来解决。注重子发芽中的rownum必需要有别号,否则仍是不会查出记实来,这是因为rownum不是某个表的列,如不美观不起别号的话,无法知道rownum是子发芽的列仍是主发芽的列。
$ W8 }4 r' W2 B- t7 n SQL>select * from(select rownum no ,id,name from student) where no>2;9 v& b0 r2 a9 x$ X' {' G- C7 o8 A c
NO ID NAME/ u$ b+ F& u! u1 Z8 w8 s
---------- ------ ---------------------------------------------------$ ?( Y' y. `" z
3 200003 李三
* \' G t4 s @$ W9 n% a, X 4 200004 赵四; d/ C6 o# z/ k) B# ]8 {
SQL> select * from(select rownum,id,name from student)where rownum>2;+ I3 e/ t ?% w2 e1 \' x
ROWNUM ID NAME
5 J$ b3 J+ }4 Z' j/ X8 o% Q8 `* Z9 l
---------- ------ --------------------------------------------------- |