oracle和sql server取第一条记录的区别以及rownum详解
答案:2 悬赏:0 手机版
解决时间 2021-01-31 02:23
- 提问者网友:我没有何以琛的痴心不悔
- 2021-01-30 20:05
oracle和sql server取第一条记录的区别以及rownum详解
最佳答案
- 五星知识达人网友:由着我着迷
- 2021-01-30 20:50
oracle
select * from T where rownum = 1;
sql server
select top 1 * from T;
select * from T where rownum = 1;
sql server
select top 1 * from T;
全部回答
- 1楼网友:拾荒鲤
- 2021-01-30 22:14
我们知道学生可能有重名的情况,那么当重名的时候假设只需要取得重名结果集中的第一条记录。 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;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯