当前位置: 首页 > news >正文

专业的论坛网站建设开发/方象科技专注于什么领域

专业的论坛网站建设开发,方象科技专注于什么领域,深圳建设注册中心网站,武汉企业网站排名在Oracle怎样查询表中的top10条记录呢&#xff1f; select *from testwhere rownum <10下面是关于rownum的介绍 Rownum和row_number() over()的使用 ROWNUM是Oracle从8开始提供的一个伪列&#xff0c;是把SQL出来的结果进行编号&#xff0c;始终从1开始&#xff0c;常见的用…

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

 

select *
from test
where rownum <=10

 

  下面是关于rownum的介绍

  ================================

  Rownum和row_number() over()的使用

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

  比如

 

SELECT *
FROM torderdetail a
WHERE ROWNUM <= 10

 

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

 

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

 

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

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

  一般常见的

 

SELECT *
FROM (SELECT  a.*
FROM torderdetail a
ORDER BY order_date DESC)
WHERE ROWNUM <= 10

 

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

 

SELECT  a.*
FROM torderdetail a
WHERE ROWNUM <= 10
ORDER BY order_date DESC

 

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

  那为什么会有争议呢,那就在于在执行顺序上争议,是先执行排序取10条纪录,还是取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个订单纪录

 

SELECT *
FROM (SELECT a.*,
ROW_NUMBER () OVER (PARTITION BY TRUNC (order_date) ORDER BY order_date DESC)
rn
FROM torderdetail a)
WHERE rn <= 10

 

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

 

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

转载于:https://www.cnblogs.com/lexlin/archive/2012/06/19/2554315.html

http://www.jmfq.cn/news/4815073.html

相关文章:

  • 做PPT不错的网站有哪些/全国seo公司排名
  • 广州 企业网站建设/哪些网站可以发广告
  • 男人互做网站/黑科技推广软件
  • apache添加多个网站/公司品牌营销策划
  • 做网站公司哪家好/计算机编程培训学校哪家好
  • 影视cms哪个好/郑州网站优化外包顾问
  • 甘肃兰州网站建设/hs网站推广
  • 用java做网站可以/关键词优化排名用什么软件比较好
  • 沈阳网站建设优化企业/学校教育培训机构
  • 软文自助发稿软件开发 网站建设/百度推广系统营销平台
  • 做网站怎么导入地图/百度竞价广告怎么投放
  • 网站建设行业背景/谷歌推广平台
  • 公司只有一个设计师/优化网站排名解析推广
  • 网站建设seo运营规划/微信引流推广怎么找平台
  • 专门做游戏的网站/中国站长之家域名查询
  • ip地址做网站/河南网站定制
  • 结合实际/浙江seo技术培训
  • c网站开发源代码/哪家竞价托管专业
  • 大型平台网站开发/app推广软文范文
  • 韩国唯美网站设计/seo排名分析
  • 移动互联网开发技术学什么/seo查询是什么意思
  • 哪些网站专门做动漫的/郑州官网网站推广优化公司
  • 现在有男的做外围女网站客服吗/网络营销服务公司
  • 怎么在网站上做视频/谷歌浏览器网页版入口手机版
  • 对外宣传网站建设方案/深圳网络推广软件
  • 做视频网站需要多大空间/百度北京分公司官网
  • 郑州网站建设设计公司/网络seo首页
  • 上海门户网站一网通办/长沙seo优化
  • 怎么把做的网站传/百度广告投诉电话
  • 网站建设竞价托管服务/济南做seo外包