Oracle查询前10条记录的操作方案

如果你想了解Oracle查询前10条记录的相关实际应用方案的话,你就可以点击以下的文章对其在实际相关操作中的正确用法,有一个更加完善的认识,希望你在浏览完以下的文章会以下就是正文的详细内容的介绍。

专注于为中小企业提供成都网站设计、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业麻山免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千余家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

在Oracle怎样查询表中的top10条记录呢?

 
 
 
  1. select *  
  2. from test  
  3. where rownum <=10  

下面是关于rownum的介绍

Rownum和row_number() over()的使用

ROWNUM是Oracle从8开始提供的一个伪列,是把SQL出来的结果进行编号,始终从1开始,常见的用途就是用来分页输出.

比如

 
 
 
  1. SELECT *  
  2. FROM torderdetail a  
  3. WHERE ROWNUM <= 10  

这条语句就是输出前10条纪录,在这里用途上类似于sql sever的top,不过rownum对于指定编号区间的输出应该说更强大

 
 
 
  1. SELECT *  
  2. FROM (SELECT a.*, ROWNUM rn  
  3. FROM torderdetail a)  
  4. WHERE rn >= 10 AND rn <= 20  

这条语句即是输出Oracle查询第10到第20条纪录,这里之所以用rownum rn,是把rownum转成实例,因为rownum本身只能用 <=的比较方式,只有转成实列,这样就可做 >=的比较了。

在实际用途中,常常会要求取最近的几条纪录,这就需要先对纪录进行排序后再取rownum <=

一般常见的

 
 
 
  1. SELECT *  
  2. FROM (SELECT a.*  
  3. FROM torderdetail a  
  4. ORDER BY order_date DESC)  
  5. WHERE ROWNUM <= 10  

而在CSDN曾经发生过讨论,关于取近的10条纪录,有人给出这样的语句

 
 
 
  1. SELECT a.*  
  2. FROM torderdetail a  
  3. WHERE ROWNUM <= 10  
  4. ORDER BY order_date DESC  

之所以会出现这样的语句,主要是从效率上的考虑,前面条语句,是要进行全表扫描后再排序,然后再取10条纪录,后一条语句则不会全表扫描,只会取出10条纪录,很明显后条语句的效率会高许多。

那为什么会有争议呢,那就在于在执行顺序上争议,是先执行排序取10条纪录,还是取10条纪录,再排序呢?两种顺序取出来的结果是截然相反的,Oracle查询前10条记录时先排序再取10条,就是取最近的10条,而先取10条,再排序,则取出的最早的10条纪录。对于此语句,普遍的认为执行顺序是先取10条纪录再排序的。

所以此语句应该是错误。但实际上并非如此,此语句的执行顺序和order by的字段有关系,如果你order by 的字段是pk,则是先排序,再取10条(速度比第一种语句快),而排序字段不是PK 时,是先取10条再排序,此时结果就与要求不一样了,所以第二种写法一定要在排序字段是主键的情况下才能保证结果正确。

Row_number() over()这个分析函数是从9I开始提供的,一般的用途和rownum差不多。

一般写法row_number() over( order by order_date desc) 生成的顺序和rownum的语句一样,效率也一样(对于同样有order by 的rownum语句来说),所以在这种情况下两种用法是一样的。

而对于分组后取最近的10条纪录,则是rownum无法实现的,这时只有row_number可以实现,row_number() over(partition by 分组字段 order by 排序字段)就能实现分组后编号,比如说要取近一个月的每天最后10个订单纪录

 
 
 
  1. SELECT *  
  2. FROM (SELECT a.*,  
  3. ROW_NUMBER () OVER (PARTITION BY TRUNC (order_date) ORDER BY order_date DESC)  
  4. rn  
  5. FROM torderdetail a)  
  6. WHERE rn <= 10  

Rownum的另类用法,有时候我们会遇到这种需求,要求输出当月的所有天数,许多人会烦恼,数据库里又没有这样的表,怎么输出一个月的所有天数呢?用rownum就能解决:

 
 
 
  1. SELECT TRUNC (SYSDATE, 'MM') + ROWNUM - 1  
  2. FROM DUAL  
  3. CONNECT BY ROWNUM <= TO_NUMBER 
    (TO_CHAR (LAST_DAY (SYSDATE), 'dd'))  

以上的相关内容就是对Oracle查询前10条记录的介绍,望你能有所收获。

【编辑推荐】

  1. Oracle数据库中的两个进程
  2. Oracle SMON进程中系统监视进程SMON
  3. Oracle数据字典中包含的视图有哪些
  4. Oracle数据字典的用途介绍
  5. Oracle数据库中常用的用户

当前题目:Oracle查询前10条记录的操作方案
标题URL:http://www.36103.cn/qtweb/news45/21995.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联