最近沒繼續寫的緣由是忙成狗html
是真的忙成狗不是修辭的sql
這是我最近的狀態spa
近期高清無碼大圖設計
前面在寫sql排序取值的時候被rownum卡了一下code
心思鬱結htm
在心裏百萬草泥馬踏平Oracle大樓後決定好好看一下rownumblog
研習良久,心有所得排序
如今放出來讓你們感覺一下Oracle在這個字段上究竟是多麼反人類。
get
首先咱們假設這樣一張表:
table
t_orcl
id | type |
11 | a |
3 | b |
2 | c |
6 | d |
5 | e |
8 | f |
(1)我要取表的第二條記錄
select rownum, id, type from t_orcl where rownum = 2; (誤)
無論從哪一個角度來看的話這句話貌似都是沒錯的吧
等於2嘛
不可能有哪一種語言腦殘到連等於2都不明白吧
吶,圖樣
在Oracle看來,1是true
其餘全部東西都是false
全部你你你懂吧?全部都是false
丟雷樓謀
因此說1以上的天然數在作等於判斷時被認爲是false條件,查不出結果的
摔
(2)我要取第三四五六條記錄
select rownum, id, type from t_orcl where rownum > 2; (誤)
如今我已經不敢保證這句話的正確性了
大於false嘛
之因此還要寫出來純粹是抱着一種「呵呵有種你來砍死我」的僥倖心理
而後丫痛痛快快的砍死了我
嗯嗯
大於false嘛
有心理準備的
那正確の姿式是什麼樣子的呢?
這樣
select * from (select rownum no, id, type from t_orcl) where no > 2;
要注意的是rownum必需要有別名
由於主查詢和子查詢都有一個rownum它不知道你指的是哪一個
呃
你這麼傻*還尼瑪裝高端!
你不是什麼都知道嗎?
你不是什麼都當false嗎?
你不是視一切如過眼雲煙嗎?
摔
(3)我要取第一二條記錄
select rownum, id, type from t_orcl where rownum < 3;
其實我已經不想試了
小於false嘛怎麼可能會有結果
再寫一遍的意思就像是「我有盾你TM有種殺我兩遍」
而後這句話竟!然!有!結!果!
(4)我要取第二三條記錄
select * from (select rownum no, id, type from t_orcl where rownum <= 3) where no >= 2;
這句話是對的
真的,是對的
咱們是先讓它返回小於等於3的記錄行
而後再在主查詢中判斷新的rownum的別名列大於等於2的行
我知道這樣會影響效率
反正也就這麼着吧
心好累
(5)排序
select rownum, id, type from t_orcl order by id;
結果什麼的不重要
如今我來憑藉我紮實的語言功底描述一下
因爲rownum取值是在排序以前因此數據依據id排序後rownum也依據其所服♂侍的那一列的id進行了排序因此顯示出來的結果就是rownum並非按順序排列的而是排序以前的rownum在排序以後的順序。
顯示的是排序以前的rownum在排序以後的順序。
我真是折服於本身的語言表達能力
就是這樣
(6)正しい分類方法
select rownum, id, type from (select * from t_orcl order by id);
我高考語文一百二十七分
因此我須要再一次描述一下結果
結果就是大家心中想的那種排序
好了至此我想說的都說完了
還有一點是對Oracle的設計師說的:
這種人好惡心的!
臭不要臉還在笑!
我搶劫你什麼
我是搶劫的人嗎
把我騙來這麼遠
打我還要叫人來
我這麼遠趕過來
一百塊都不給我
還在還在還在笑
好壞好壞好壞的
我打了你哪裏
你打我差很少
我搶劫你什麼
一百塊都不給我
Done.
PS.這篇文章是轉載的
原帖網址是這個
http://v.ifeng.com/vblog/fun/201411/044bd588-725c-472e-a295-b2977f07e53f.shtml
我是從第1分10秒開始轉的。
PS2.我說不放圖就不放圖了麼說什麼你都信這孩子真可愛呵呵呵