Oracle 的 rownum 相关

最近没继续写的原因是忙成狗

是真的忙成狗不是修辞的

这是我最近的状态

153203_42kX_1040430.jpg

近期高清无码大图


前面在写sql排序取值的时候被rownum卡了一下

心思郁结

153556_8gAb_1040430.jpg

在内心百万草泥马踏平Oracle大楼后决定好好看一下rownum

研习良久,心有所得

现在放出来让大家感受一下Oracle在这个字段上到底是多么反人类。

153640_YFHx_1040430.jpg


首先我们假设这样一张表:

t_orcl

idtype
11a
3b
2c
6d
5e
8f


(1)我要取表的第二条记录

select rownum, id, type from t_orcl where rownum = 2;  (误)

不管从哪个角度来看的话这句话貌似都是没错的吧

等于2嘛

不可能有哪种语言脑残到连等于2都不明白吧

153831_VcDS_1040430.jpg

呐,图样

在Oracle看来,1是true

其他所有东西都是false

所有你你你懂吧?所有都是false

153916_SF54_1040430.jpg

丢雷楼谋

所以说1以上的自然数在做等于判断时被认为是false条件,查不出结果的

154026_M798_1040430.jpg


(2)我要取第三四五六条记录

select rownum, id, type from t_orcl where rownum > 2;  (误)

现在我已经不敢保证这句话的正确性了

大于false嘛

之所以还要写出来纯粹是抱着一种“呵呵有种你来砍死我”的侥幸心理

然后丫痛痛快快的砍死了我

154554_pUhh_1040430.jpg

嗯嗯

大于false嘛

有心理准备的


那正确の姿势是什么样子的呢?

这样

select * from (select rownum no, id, type from t_orcl) where no > 2;

要注意的是rownum必须要有别名

因为主查询和子查询都有一个rownum它不知道你指的是哪个

155107_WoH9_1040430.jpg

你这么傻*还尼玛装高端!

你不是什么都知道吗?

你不是什么都当false吗?

你不是视一切如过眼云烟吗?

154637_eTl8_1040430.jpg


(3)我要取第一二条记录

select rownum, id, type from t_orcl where rownum < 3;

其实我已经不想试了

小于false嘛怎么可能会有结果

再写一遍的意思就像是“我有盾你TM有种杀我两遍”

然后这句话竟!然!有!结!果!

154902_lMJJ_1040430.jpg


(4)我要取第二三条记录

select * from (select rownum no, id, type from t_orcl where rownum <= 3) where no >= 2;

这句话是对的

真的,是对的

我们是先让它返回小于等于3的记录行

然后再在主查询中判断新的rownum的别名列大于等于2的行

我知道这样会影响效率

反正也就这么着吧

154937_K985_1040430.jpg

心好累


(5)排序

select rownum, id, type from t_orcl order by id;

结果什么的不重要

现在我来凭借我扎实的语言功底描述一下

由于rownum取值是在排序之前所以数据依据id排序后rownum也依据其所服♂侍的那一列的id进行了排序所以显示出来的结果就是rownum并不是按顺序排列的而是排序之前的rownum在排序之后的顺序。

显示的是排序之前的rownum在排序之后的顺序。

我真是折服于自己的语言表达能力

155322_THL6_1040430.jpg

就是这样


(6)正しい分類方法

select rownum, id, type from (select * from t_orcl order by id);

我高考语文一百二十七分

所以我需要再一次描述一下结果

结果就是你们心中想的那种排序

155605_BTrM_1040430.gif


好了至此我想说的都说完了

还有一点是对Oracle的设计师说的:

这种人好恶心的!

臭不要脸还在笑!

我抢劫你什么

我是抢劫的人吗

把我骗来这么远

打我还要叫人来

我这么远赶过来

一百块都不给我

还在还在还在笑

好坏好坏好坏的

我打了你哪里

你打我差不多

我抢劫你什么

一百块都不给我

154448_kh2X_1040430.jpg


Done.


PS.这篇文章是转载的

原帖网址是这个

http://v.ifeng.com/vblog/fun/201411/044bd588-725c-472e-a295-b2977f07e53f.shtml

我是从第1分10秒开始转的。


PS2.我说不放图就不放图了么说什么你都信这孩子真可爱呵呵呵

154325_6fIU_1040430.jpg

转载于:https://my.oschina.net/u/1040430/blog/350488

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值