问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle和sql server取第一条记录的区别以及rownum详解

发布网友 发布时间:2022-04-20 14:02

我来回答

2个回答

热心网友 时间:2022-04-08 02:08

我们知道学生可能有重名的情况,那么当重名的时候假设只需要取得重名结果集中的第一条记录。

sql server:
select top(1) num,Name from M_Student where name = 'xy'

Oracle:
select num,Name from M_Student where name = 'xy' and rownum <= 1

对于rownum在oracle的使用的时候,有几点需要注意:

(1) rownum 对于等于某值的查询条件
如果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学生的信息,使用rownum=2结果查不到数据。因为rownum都是从1开始,但是1以上的自然数在rownum做等于判断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数)。

(2) rownum对于大于某值的查询条件
如果想找到从第二行记录以后的记录,当使用rownum>2是查不出记录的,原因是由于rownum是一个总是从1开始的伪列,Oracle 认为rownum> n(n>1的自然数)这种条件依旧不成立,所以查不到记录。

(3) rownum对于小于某值的查询条件
rownum对于rownum<n(n>1的自然数)的条件认为是成立的,所以可以找到记录。比如 rownum < 3

(4) rownum和排序
Oracle中的rownum的是在取数据的时候产生的序号,所以想对指定排序的数据去指定的rowmun行数据就必须注意了。

select rownum ,id,name from student order by name;

ROWNUM ID NAME
3 200003 李三
2 200002 王二
1 200001 张一
4 200004 赵四
可以看出rownum并不是按照name列来生成的序号。系统是按照记录插入时的顺序给记录排的号,rowid也是顺序分配的。必须使用子查询。

select rownum ,id,name from (select * from student order by name);
ROWNUM ID NAME
3 200003 李三
2 200002 王二
1 200001 张一
4 200004 赵四
这样就成了按name排序,并且用rownum标出正确序号(由小到大)

看一个例子
把最先进入公司的5个人找出来
方法一 SELECT * FROM emp WHERE ROWNUM <= 5 ORDER BY hiredate;
方法二 SELECT * FROM(SELECT * FROM emp ORDER BY hiredate) WHERE ROWNUM <= 5;

把最先进入公司的6-10个人找出来
方法一
SELECT * FROM (SELECT * FROM emp ORDER BY hiredate)
WHERE ROWNUM <= 10
MINUS
SELECT * FROM (SELECT * FROM emp ORDER BY hiredate)
WHERE ROWNUM <= 5;

方法二(分页常用)
SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM <= 10) t WHERE t.rn >= 6;
SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT ename, sal FROM emp) e WHERE ROWNUM <= 10) WHERE rn >= 6;

热心网友 时间:2022-04-08 03:26

(1) rownum 对于等于某值的查询条件
如果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学生的信息,使用rownum=2结果查不到数据。因为rownum都是从1开始,但是1以上的自然数在rownum做等于判断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数)。

(2) rownum对于大于某值的查询条件
如果想找到从第二行记录以后的记录,当使用rownum>2是查不出记录的,原因是由于rownum是一个总是从1开始的伪列,Oracle 认为rownum> n(n>1的自然数)这种条件依旧不成立,所以查不到记录。

(3) rownum对于小于某值的查询条件
rownum对于rownum<n(n>1的自然数)的条件认为是成立的,所以可以找到记录。比如 rownum < 3

(4) rownum和排序
Oracle中的rownum的是在取数据的时候产生的序号,所以想对指定排序的数据去指定的rowmun行数据就必须注意了。
select rownum ,id,name from student order by name;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
"多难兴邦"这个词,让我们懂得了什么? uc怎么进入阅读模式 进入阅读模式方法介绍 uc怎么进入小说阅读模式 uc浏览器设置阅读模式-uc浏览器设置阅读模式方法 uc电脑阅读模式怎么设置电脑上UC浏览器的阅读模式怎么打开 微信怎么判断对方把你拉黑并且删除了,还是只是拉黑了? 公司诉讼由哪个法院管辖?公司诉讼管辖确定的理论依据? 笔记本电脑开机无法进入系统笔记本电脑开机后无法进入系统 从深圳到乌镇玩三天,花销最少是多少?越少越好,如果有个计划就更好乐 马上快过年放假了,第一次去见岳父,送茅台好还是五粮液好? 在oracle中ROWNUM是什么东西? oracle 10g 在查询结果列中添加rownum列,查询出的... 在PLSQL中怎么能取到表中按ID降序排列的前十条记录... oracle rownum的问题 如何在一个select 语句中显示行的序号 oracle 中rownum怎么用 select rownum ,id from T where rownum = 2 oralc... 在oracle中ROWNUM是什么东西?拜托各位大神 SQL中ROWNUM是做什么的?有什么作用? 索尼哪款单反相机性价比比较高? 索尼的单反相机到底好不好 索尼a500相机是属于单反还是微单?为什么我在京东... sony&nbsp;nex5比专业单反相机差在哪里呢?求高手解释 索尼DSC-HX30 是单反相机吗 索尼单反相机哪款好 三款新手入门级相机 索尼有哪些型号的单反相机 索尼a65是单反相机还是单电相机 索尼入门级单反相机哪个型号好,索尼入门级单反相机 索尼DSC-F717是单反吗? Sony有没有出过单反相机 orcale rownum 分页查询的数据顺路混乱 oracle rownum的疑问 为什么oracle中rownum只能小于,不能大于 oracle中rownum和rowid的区别 oracle 中的rownum 是什么时候产生的? ORACLE如何select相同的字段并添加分组序号 sqlsever 里有没有rownum这样的方法 sql 查询指定行 rownum的理解 oracle中rownum的用法 冰箱上层不制冷是什么原因容声电脑直冷三门冰箱上... 冰箱上面不制冷 下面制冷怎么回事? 容声冰箱上面不制冷下面正常? wifi已连接(无法上网)是欠费了吗 已连接(不可上网)手机没有欠费,重启无线,路由器... 手机网络已连接但无法访问互联网怎么解决 我的手机无法使用无线网络是怎么回事,用的是家里... 手机网络已连接但无法访问 手机已连接但无法访问互联网是怎么回事? buff可以用花呗支付吗