在sql server中可以通过SELECT TOP N来取得想要结果的前几行的信息。

但是在oracle中必须借助伪列rownum来完成

一个查询语句在取得结果集后,伪列rownum就会从1开始,从上往下依次递增。rownum是对结果集的编序排列。例如下表:

SQL> select id,name,salary,rownum from wages;

ID NAME           SALARY     ROWNUM

---------- ---------- ---------- ----------

1 zhangsan         3600          1

2 lisi             2500          2

3 wangwu           5000          3

4 zhaoliu          4500          4

5 xiaoming         2000          5

所以取得该表的前三行,为

SQL> select id,name,salary,rownum from wages where rownum<=3;

ID NAME           SALARY     ROWNUM

---------- ---------- ---------- ----------

1 zhangsan         3600          1

2 lisi             2500          2

3 wangwu           5000          3

但是,这样直接取表的前N行一般是无意义的。rownum一般是和order by搭配使用,通过排序,再取得自己想要的前几行。

但是在使用rownum的时候要注意,使用排序后,返回的结果顺序是进行了排序,但是rownum还是和原来的一样,没有随着排序而改变。

原因:ROWNUM的编排在排序之前就产生了。

SQL> select id,name,salary,rownum from wages order by salary;

ID NAME           SALARY     ROWNUM

---------- ---------- ---------- ----------

5 xiaoming         2000          5

2 lisi             2500          2

1 zhangsan         3600          1

4 zhaoliu          4500          4

3 wangwu           5000          3

所以此时使用要取工资最高的前三名,就发生了错误的结果

SQL> select id,name,salary,rownum from wages where rownum<=3 order by salary;

ID NAME           SALARY     ROWNUM

---------- ---------- ---------- ----------

2 lisi             2500          2

1 zhangsan         3600          1

3 wangwu           5000          3

但是,我们可以需要嵌套一层子查询来抽取排序好的数据

SQL>  select id,name,salary,rownum from (select * from wages order by salary);

ID NAME           SALARY     ROWNUM

---------- ---------- ---------- ----------

5 xiaoming         2000          1

2 lisi             2500          2

1 zhangsan         3600          3

4 zhaoliu          4500          4

3 wangwu           5000          5

此时,rownum已经发生了变化,在通过外部查询指定范围,就可以得到想要的正确结果

SQL> select id,name,salary,rownum from (select * from wages order by salary) where rownum<=3;

ID NAME           SALARY     ROWNUM

---------- ---------- ---------- ----------

5 xiaoming         2000          1

2 lisi             2500          2

1 zhangsan         3600          3

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31386161/viewspace-2128815/,如需转载,请注明出处,否则将追究法律责任。

oracle怎么获取行,在oracle中如何实现SELECT TOP N取得前几行记录相关推荐

  1. 进阶指令——df指令(作用:查看磁盘的空间)、free指令(作用:查看内存使用情况)、head指令(作用:查看一个文件的前n行,如果不指定n,则默认显示前10行)、tail指令、less指令

    1.df指令 作用:查看磁盘的空间 语法:#df -h -h表示以可读性较高的形式展示大小 2.free指令 作用:查看内存使用情况 语法:#free -m   -m表示以mb为单位查看 剩余的真实可 ...

  2. oracle sql 获取当前时间,Oracle 在SQL语句中如何获取系统当前时间并进行操作

    ### 前言 Oracle中如何获取系统当前时间进行语句的筛选是SQL语句的常见功能 获取系统当前时间 date类型的: select sysdate from dual; char类型的: sele ...

  3. oracle sql获取本季度,oracle sql 获取本季度所有月份,上季度所有月份

    上季度所有月份: ),-ROWNUM),'YYYYMM') LAST_Q A FROM DUAL) CONNECT ; 本季度所有月份: ),-ROWNUM),'YYYYMM') LAST_Q FRO ...

  4. mysql top limit_MySQL中如何实现select top n ----Limit

    用惯了access mssql server的朋友,可能在用mysql查询前N条记录时,习惯的使用select top n 形式的语句,在这里说明一下,mysql没有此语法,mysql用limit来实 ...

  5. mysql只显示前几行_常见数据库SELECT结果只显示前几条记录方法汇总

    为了查看数据表中的数据情况.经常会遇到想让查询结果只显示N行,比如只显示10行的情况.不同的数据库有不同的关键字和SELECT实现语法. 1.SQL Server数据库 select top 10   ...

  6. oracle用户获取datameta权限,Oracle数据库提权(低权限提升至dba)

    0x01 Oracle存储过程"缺陷" 在 Oracle 的存储过程中,有一个有趣的特点:运行权限.运行权限分为两种,definer 和 invoker. definer 为函数创 ...

  7. oracle如何获取xml节点,oracle解析xml,带命令空间的节点获取

    在xml里有两个解析xml的函数extract和extractVALUE,这两个函数可以带两个参数,也可以带上个参数,第三个参数是命令空间,对于namespace_string,刚开始我也很疑惑,然后 ...

  8. oracle表连接——处理连接过程中另外一张表没有相关数据不显示问题

    一个数据表基本上很难满足我们的查询要求,同时,将所有的数据都保存在一个表格中显然也不是一种好的数据库设计,为了避免数据的冗余,删除.更新异常,我们通常需要建立一张外键表,通过表连接,来获取我们自己想要 ...

  9. oracle不显示表和过程,oracle表连接——处理连接过程中另外一张表没有相关数据不显示问题...

    一个数据表基本上很难满足我们的查询要求,同时,将所有的数据都保存在一个表格中显然也不是一种好的数据库设计,为了避免数据的冗余,删除.更新异常,我们通常需要建立一张外键表,通过表连接,来获取我们自己想要 ...

最新文章

  1. 汪国华 基因组分析的生物信息学算法
  2. shared_ptr 的使用及注意事项
  3. bert简介_关于BERT:你不知道的事
  4. linux 编写完程序吗,linux下编写C++程序
  5. vue 生成发布包_Vue 3.0 终于正正正正正式发布了!
  6. 车险往年保单关联计算的性能优化
  7. Bootstrap3 工具提示插件的事件
  8. dmol3给定关键字不在字典中_一日一技:举例说明python中的map()方法
  9. 网络热词下的民意传播
  10. spring学习笔记一(基于xml)
  11. Windows Server 2008 R2之三十八 Hyper-V的授权管理
  12. 【5年Android从零复盘系列之三十四】Android存储(9):腾讯MMKV 高性能键值存储组件详解
  13. 817c语言程序设计,全国名校C语言程序设计考研真题汇编
  14. Google浏览器书签栏优化
  15. 【解决】RuntimeError:Trying to backward throughthe graph a second time
  16. 十年后的我们会是什么样的呢,二十年后的我国 会是什么样呢
  17. 使用Heartbeat实现双机热备
  18. jeecgboot功能优化——前端表格换行与不换行
  19. PTA 数据结构与算法 7-29 修理牧场
  20. 【配置Hifive1-revB】设备管理器中不识别端口,Can not connect to J-Link via USB的解决办法

热门文章

  1. error C2440 “static_cast” 无法从“void (__thiscall CPppView )(void)”转换为“LRESULT (__thiscall
  2. 小小c#算法题 - 3 - 字符串语句反转
  3. 简单了解tengine
  4. Java Web的web.xml文件作用及基本配置(转)
  5. sqL编程篇(三) 游标与存储过程
  6. MySQL数据库和ACID模型
  7. Fast Image Cache – iOS 应用程序高性能图片缓存
  8. C语言中return和exit的区别
  9. 我来告诉你为什么中国民营企业管理失败的原因!
  10. r psm倾向性匹配_南瓜香料指标psm如何规划季节性广告