select * from (select * from tbname order by colname)
where rownum<6 u="">6>
oracle没有top的用法。
为什么只能rownum<
如果用到rownum > 就出错?
rownum是随着结果集生成的,一旦生成,就不会变化了;
同时,生成的结果是依次递加的,没有1就永远不会有2!
rownum 是在 查询集合产生的过程中产生的伪列,并且如果where条件中存在 rownum 条件的话,则:
1: 假如 判定条件是常量,则:
只能 rownum = 1, <= 大于1 的自然数, = 大于1 的数是没有结果的, 大于一个数也是没有结果的
即 当出现一个 rownum 不满足条件的时候则 查询结束
如果要中间的纪录的话要怎样才行?
select * from
(select *,rownum num from
(select * from tbname order by colname) a
where rownum<10 b="" u="">10>
where num>4;
select * from(select * from table_name order by col_name) where rownum<6 u="">6>
select * from (select rownum rm,a.* from table_name a order by col_name where rownumm;
-- 我們想把最先進入公司的5個人找出來
SELECT * FROM emp WHERE ROWNUM <= 5 ORDER BY hiredate;
或
SELECT * FROM (SELECT * FROM emp ORDER BY hiredate)
WHERE ROWNUM <= 5;
-- 我們想把最先進入公司的6~10個人找出來!!!!!!!!!!!!!!
SELECT * FROM (SELECT * FROM emp ORDER BY hiredate)
WHERE ROWNUM <= 10
MINUS
SELECT * FROM (SELECT * FROM emp ORDER BY hiredate)
WHERE ROWNUM <= 5;