最近没继续写的原因是忙成狗
是真的忙成狗不是修辞的
这是我最近的状态
近期高清无码大图
前面在写sql排序取值的时候被rownum卡了一下
心思郁结
在内心百万草泥马踏平Oracle大楼后决定好好看一下rownum
研习良久,心有所得
现在放出来让大家感受一下Oracle在这个字段上到底是多么反人类。
首先我们假设这样一张表:
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.我说不放图就不放图了么说什么你都信这孩子真可爱呵呵呵