最近没继续写的缘由是忙成狗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.我说不放图就不放图了么说什么你都信这孩子真可爱呵呵呵