--試驗用表
create table table_demo (id number(10),name varchar2(10));
--原來是用100條有序記錄試驗,有誤。已刪除
declare
i int := 1;
begin
loop
insert into table_example values (i,'user_' || i);
exit when i = 100;
i := i + 1;
end loop;
end;
--10條無序、不重覆記錄
insert into table_demo values ('10', 'user_10');
insert into table_demo values ('1', 'user_1');
insert into table_demo values ('8', 'user_8');
insert into table_demo values ('4', 'user_4');
insert into table_demo values ('6', 'user_6');
insert into table_demo values ('5', 'user_5');
insert into table_demo values ('3', 'user_3');
insert into table_demo values ('7', 'user_7');
insert into table_demo values ('9', 'user_9');
insert into table_demo values ('2', 'user_2');
簡單地查出第1條。
返回結果:--查出第1條
select * from table_demo t where rownum = 1;
id name
10 user_10
按id遞增排序,查出第1條。
①錯誤做法:
返回結果:--按id遞增排序,查出第1條【錯誤】
select * from table_demo t where rownum = 1 order by t.id asc;
id name
10 user_10
原因:rownum是對結果集加的乙個偽列;oracle是先給記錄乙個rownum,再進行order by。
當在where子句中使用rownum的時候,限制返回的行數為1,然後對唯一的這一條記錄進行排序。
②正確做法:
返回結果:--按id遞增排序,查出第1條【正確】
select *
from (select * from table_demo t order by t.id asc)
where rownum = 1;
id name
1 user_1
例如:查第2條。①錯誤做法
--查出第2條【錯誤】
select * from table_demo t where rownum = 2;
返回結果:(空)個人理解:rownum是對結果集加的乙個偽列。所以查詢時,每取到一條,就會去校驗一下條件:
又由於,rownum總是從1開始排起的。實際rownum=1 ≠ 2。所以,記錄被捨棄。where rownum = 2
以此類推,所有的記錄都逐一被捨棄,最終返回空。
網上查到的解釋:「1」以上的自然數,在rownum做等於判斷是時認為都是false條件,所以無法查到rownum = n(n>1的自然數)。
②正確做法
返回結果:--查出第2條【正確】
select * from (select rownum rn, t.* from table_demo t) where rn = 2
rn id name
2 1 user_1
返回結果:--請按id遞增排序,查出前5條記錄。
select *
from (select * from table_demo t order by t.id asc)
where rownum <= 5;
id name
1 user_1
2 user_2
3 user_3
4 user_4
5 user_5
目前只想到先遞減排序,取結果集,再遞增排序。
返回結果:--請按id遞增排序,查出後5條記錄。
select *
from (select * from table_demo t order by t.id desc) c1
where rownum <= 5
order by c1.id asc
id name
6 user_6
7 user_7
8 user_8
9 user_9
10 user_10
例如,m=3,n=7。返回結果:--請按id遞增排序,查出第3條至第7條記錄。(即第3、4、5、6、7這五條)
select *
from (select rownum rn, c1.*
from (select t.* from table_demo t order by t.id asc) c1)
where rn >= 3
and rn <= 7;
rn id name
3 3 user_3
4 4 user_4
5 5 user_5
6 6 user_6
7 7 user_7
兩句話寫的很好
只要你經商,就會有錢賺。備註 1.有這個想法,主要 於最近倒賣幾塊電路板,賺了幾百快錢,發現錢來得太容易了,我只是在網上和人聊聊天而已,雖然我不是陪聊,但是他們給我送錢了。2.經商的重大意義,在於大膽地開啟自己的口袋,讓錢可以很方便地流進來 土一點的道理就是,要是你不把帳號告訴別人,別人就不好打錢給...
再說兩句話 mysql 優化問題
原貼 http www.fcicq.net wp p 273 september 23,2006 at 19 37 45 filed under mysql sqlite,技術文件 使用了random posts外掛程式.重談mysql的優化問題.index cache開大點行不行?query ca...
兩句話治好頸椎病!
治好頸椎病第一句話 你拍一,我拍一,一直拍到七十七 就是右手拍左肩,左手拍右肩,能伸多遠伸多遠,一直拍到七十七次。這個動作,如果是年輕人,從後面拍更好。老人從前面拍也行。這樣做,血液馬上流暢。治好頸椎病牛人第二句話 深呼吸,下蹲起,10點10分去看戲 深呼吸,一種叫胸式呼吸,一種叫腹式呼吸。我們平時...