SQL語法 | PL/SQL | Function | TRIGGER | StoreProc | DBA

2015年6月11日 星期四

我查询出50条纪录,我只想要最前面的5条纪录(按某个字段排好序的)?


select * from (select * from tbname order by colname)
where rownum<6 u="">

oracle没有top的用法。
为什么只能rownum<
如果用到rownum > 就出错?

rownum是随着结果集生成的,一旦生成,就不会变化了;
同时,生成的结果是依次递加的,没有1就永远不会有2! 

rownum 是在 查询集合产生的过程中产生的伪列,并且如果where条件中存在 rownum 条件的话,则
1 假如 判定条件是常量,则: 
只能 rownum = 1, <= 大于的自然数, = 大于的数是没有结果的, 大于一个数也是没有结果的 
 当出现一个 rownum 不满足条件的时候则 查询结束
如果要中间的纪录的话要怎样才行?
select * from
(select *,rownum num from
(select * from tbname order by colname) a
where rownum<10 b="" u="">

where num>4;

select * from(select * from table_name order by col_name) where rownum<6 u="">

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;