CREATE TABLE TEST(
ID NUMBER,
NAME VARCHAR2(20)
)
INSERT INTO TEST VALUES (1,'张三');
INSERT INTO TEST VALUES (2,'李四');
INSERT INTO TEST VALUES (3,'王五');
INSERT INTO TEST VALUES (4,'陈二狗');
INSERT INTO TEST VALUES (5,'宁姚');
INSERT INTO TEST VALUES (6,'齐静春');
INSERT INTO TEST VALUES (7,'陈平安');
原因一 oracle默认为每个表生成rowmun,rowid字段,这些字段我们称之为伪列
select rowid,rownum,id,name from TEST;
rowid一般用不到,Oracle内部用来存储行的物理位置,和分页相关的就是rownum,也就是行号
select rowid,rownum,id,name from test where rownum <5;
select rownum,id,name from test where rownum>2 and rownum <5;
发现什么都没有查出来:原因是
1 ROWNUM只适用于小于或小于等于,如果进行等于判断,那么只能等于1;
2 ROWNUM是oracle系统顺序分配的行的编号,返回的第一行分配的是1,第二行是2,依此类推;
3 ROWNUM总是从1开始
4 第一条数据行号为1,不符合>2的条件,则第一行被去掉,之前的第二行变为新的第一行,如此下去,一直到最后一行,条件始终没法满足,所以就一条数据也查不出来。
select rownum,id,name from
( select rownum rn, u.* from test u where rownum<5) un
where un.rn>2
select rownum,id,name from (
select rownum rn , t.* from test t where rownum <=6) n
where n.rn>=4
select rownum,id,name from (
select rownum rn, n.* from
(
select * from test --最内层循环该怎么写怎么写
) n where rownum <=6 --小于限制写在第二层
)
where rn>=4