如何在Oracle数据库中实现获取前几条数据的方法呢?就是类似SQL语句中的SELECT TOP N的方法。本文将告诉您答案,举例说明了哟!

1.在Oracle中实现SELECT TOP N :

由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。

简单地说,实现方法如下所示:

SELECT 列名1...列名n FROM

(SELECT 列名1...列名n

FROM 表名ORDER BY 列名1...列名n)

WHERE ROWNUM <= N(抽出记录数)

ORDER BY ROWNUM ASC

下面举个例子简单说明一下。

顾客表customer(id,name)有如下数据:

ID NAME

01 first

02 Second

03 third

04 forth

05 fifth

06 sixth

07 seventh

08 eighth

09 ninth

10 tenth

11 last

则按NAME的字母顺抽出前三个顾客的SQL语句如下所示:

SELECT * FROM

(SELECT * FROM CUSTOMER ORDER BY NAME)

WHERE ROWNUM <= 3

ORDER BY ROWNUM ASC

输出结果为:

ID NAME

08 eighth

05 fifth

01 first

2.在TOP N纪录中抽出第M(M <= N)条记录:

在得到了TOP

N的数据之后,为了抽出这N条记录中的第M条记录,我们可以考虑从ROWNUM着手。我们知道,ROWNUM是记录表中数据编号的一个隐藏子段,所以可以

在得到TOP N条记录的时候同时抽出记录的ROWNUM,然后再从这N条记录中抽取记录编号为M的记录,即是我们希望得到的结果。

从上面的分析可以很容易得到下面的SQL语句:

SELECT 列名1...列名nFROM

(

SELECT ROWNUM RECNO, 列名1...列名nFROM

(SELECT 列名1...列名nFROM 表名ORDER BY 列名1...列名n)

WHERE ROWNUM <= N(抽出记录数)

ORDER BY ROWNUM ASC

)

WHERE RECNO = M(M <= N)

同样以上表的数据为基础,那么得到以NAME的字母顺排序的第二个顾客的信息的SQL语句应该这样写:

SELECT ID, NAME FROM

(

SELECT ROWNUM RECNO, ID, NAME FROM

(SELECT * FROM CUSTOMER ORDER BY NAME)

WHERE ROWNUM <= 3

ORDER BY ROWNUM ASC )

WHERE RECNO = 2

结果则为:

ID NAME

05 fifth

3.抽出按某种方式排序的记录集中的第N条记录:

在2的说明中,当M = N的时候,即为我们的标题第三点所讲的结果。实际上,第二点的做法在里面N>M的部分的数据是基本上不会用到的,我们仅仅是为了说明方便而采用。

如上所述,则SQL语句应为:

SELECT 列名1...列名nFROM

(

SELECT ROWNUM RECNO, 列名1...列名nFROM

(SELECT 列名1...列名nFROM 表名ORDER BY 列名1...列名n)

WHERE ROWNUM <= N(抽出记录数)

ORDER BY ROWNUM ASC

)

WHERE RECNO = N

那么,2中的例子的SQL语句则为:

SELECT ID, NAME FROM

(

SELECT ROWNUM RECNO, ID, NAME FROM

(SELECT * FROM CUSTOMER ORDER BY NAME)

WHERE ROWNUM <= 2

ORDER BY ROWNUM ASC

)

WHERE RECNO = 2

结果为:

ID NAME

05 fifth

4.抽出按某种方式排序的记录集中的第M条记录开始的X条记录:

上一点所讲的仅仅是抽取一条记录的情况,当我们需要抽取多条记录的时候,此时在第二点中的N的取值应该是在N >= (M + X -

1)这个范围内,当然最经济的取值就是取等号的时候了。当然最后的抽取条件也不是RECNO = N了,应该是RECNO BETWEEN M AND

(M + X - 1)了,所以随之而来的SQL语句则为:

SELECT 列名1...列名nFROM

(

SELECT ROWNUM RECNO, 列名1...列名nFROM

(

SELECT 列名1...列名nFROM 表名ORDER BY 列名1...列名n)

WHERE ROWNUM <= N (N >= (M + X - 1))

ORDER BY ROWNUM ASC

)

WHERE RECNO BETWEEN M AND (M + X - 1)

同样以上面的数据为例,则抽取NAME的字母顺的第二条记录开始的3条记录的SQL语句为:

SELECT ID, NAME FROM

(

SELECT ROWNUM RECNO, ID, NAME FROM

(SELECT * FROM CUSTOMER ORDER BY NAME)

WHERE ROWNUM <= (2 + 3 - 1)

ORDER BY ROWNUM ASC

)

WHERE RECNO BETWEEN 2 AND (2 + 3 - 1)

结果如下:

ID NAME

05 fifth

01 first

04 forth

以此为基础,再扩展的话,做成存储过程,将开始记录数以及抽取记录数为参数,就可以轻松实现分页抽取数据。

不同数据库,查询前n条数据的SQL语句

不同的数据库,支持的SQL语法略有不同,以下是不同数据库查询前n条数据的SQl语句 SQL Server(MSSQL) SELECT TOP n * FROM table_name ORACLE SE ...

Oracle查询前几条数据的方法

在Oracle中实现select top N:由于Oracle不支持select top 语句,所以在Oracle中经常是用order by 跟rownum的组合来实现select top n的查询. ...

关于sql server远程访问Oracle数据库 OpenQuery查询返回多条数据的问题

在Sql Server远程访问Oracle 中的数据库表时: 远程语法通常为: select * from OpenQuery(Oracle链接服务器名称,‘查询语句’) eg: select * f ...

Linq排序,获取前5条数据

_dic = _dic.OrderByDescending(x => x.Value).ToDictionary(x=>x.Key,x=>x.Value); var Num = _d ...

oracle取分组的前N条数据

select * from(select animal,age,id, row_number()over(partition by animal order by age desc) row_num ...

oracle数据库只查询前n条

select * from  (select * from   tablename order by createdate desc)  aaa -- 按创建时间倒排序 where rownum &l ...

Oracle 获取前几行数据问题的陷阱

查询用户数据表,需要根据时间正序排序,然后获取时间最早的前三条数据,是不是第一印象想这么写: select * from users where rownum<4 order by datati ...

MySQL 分组后取每组前N条数据

与oracle的 rownumber() over(partition by xxx  order by xxx )语句类似,即:对表分组后排序 创建测试emp表 1 2 3 4 5 6 7 8 9 ...

各个数据库中,查询前n条记录的方法

SQL查询前10条的方法为: 1.select top X *  from table_name --查询前X条记录,可以改成需要的数字,比如前10条. 2.select top X *  from  ...

随机推荐

NOIP2015 Revenge

辣鸡出题人,毁我比赛,颓我精神,耗我钱财,废我青春. 去年成绩惨不忍睹就不说了...好像是100+80+0+100+50+60. 大概列一下算法. 幻方:模拟 #include

Android中的四种动画&lpar;一&rpar;

TweenAnimation 变换动画(也叫作"补间动画"),有四种(alpha scale translate rote). FrameAnimation(也叫DrawableA ...

【转】angular学习笔记&lpar;十四&rpar;-&dollar;watch&lpar;1&rpar;

本篇主要介绍$watch的基本概念: $watch是所有控制器的$scope中内置的方法: $scope.$watch(watchObj,watchCallback,ifDeep) watchObj: ...

yii下多条件多表组合查询以及自写ajax分页

多条件组合查询主要用到yii的CDbCriteria,这个类很多oem框架都有,非常好用. 前台表单 前台查询表单效果是这样的,多个条件组,每个组里放多个input,name为数组.当任何一个复选框被 ...

&lbrack;置顶&rsqb;&NewLine; Xamarin android 调用Web Api&lpar;ListView使用远程数据&rpar;

xamarin android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...

Java数字签名——ECDSA算法

ECDSA 例如微软产品的序列号的验证算法. Elliptic Curve Digital Signature Algorithm,椭圆曲线数字签名算法. 速度快,强度高,签名短 —————————— ...

PHP MySQL Order By 关键词

ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词 ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词默认对记录进行升序排序. 如果你想降序 ...

什么是语义化的HTML

语义化的HTML使用每个html标签都特定的用途,例如p标签放大段文字, h1~h6常用于标题,strong加粗强掉….. 语义化的好处: 1:去掉或样式丢失的时候能让页面呈现清晰的结构: html本 ...

Java 获取指定日期的方法汇总

import java.text.DateFormat; import java.text.ParsePosition; import java.text.SimpleDateFormat; impo ...

oracle数据库取前几行,Oracle数据库实现获取前几条数据的方法相关推荐

  1. oracle查询前五条数据库,Oracle查询前几条数据的方法详解

    在Oracle中实现select top N: 由于Oracle不支持select top 语句,所以在Oracle中经常是用order by 跟rownum 的组合来实现select top n的查 ...

  2. php html转成数组,PHP_php将HTML表格每行每列转为数组实现采集表格数据的方法,本文实例讲述了php将HTML表格每 - phpStudy...

    php将HTML表格每行每列转为数组实现采集表格数据的方法 本文实例讲述了php将HTML表格每行每列转为数组实现采集表格数据的方法.分享给大家供大家参考.具体如下: 下面的php代码可以将HTML表 ...

  3. 1对多 只取一条 mysql_MySQL 多表关联一对多查询实现取最新一条数据的方法示例...

    本文实例讲述了MySQL 多表关联一对多查询实现取最新一条数据的方法.分享给大家供大家参考,具体如下: MySQL 多表关联一对多查询取最新的一条数据 遇到的问题 多表关联一对多查询取最新的一条数据, ...

  4. 各种数据库查询前几条数据的方法

    sql在不同数据库查询前几条数据 关键字: sql 前几条结果  sql在不同数据库查询前几条数据  1. ORACLE    SELECT * FROM TABLE1 WHERE ROWNUM< ...

  5. 数据库查询前10(N)条数据的方法

    文章目录 一.Oracle中查询前10条数据 二.DB2中查询前10条数据 三.MySql中查询前10条数据 一.Oracle中查询前10条数据 select * from table where r ...

  6. 命令行mysql数据库备份_MySQL命令行备份数据库

    For instance : 数据库地址:127.0.0.1 数据库用户名:root 数据库密码:psd 数据库名称:samego samego_2 samego数据库下的两张表 managers_1 ...

  7. 地方命令SqlServer2008中解决在表上点右键把【编辑前200行】变成【编辑前10000行】的方法!...

    首先声明,我是一个菜鸟.一下文章中出现技术误导情况盖不负责 一天,刊行共事的sql2008中有[辑编前10000行],经过索摸,于终找到改的地方了. 每日一道理 流逝的日子像一片片凋零的枯叶与花瓣,渐 ...

  8. linux删除文件前几行,linux删除文件的前n行

    需求描述: 今天看了一个系统的临时文件,有5.6G的大小,这个文件也没有用了,想要将大部分的文件都删除掉. 在此记录下删除的过程.删除前n行的记录. 操作过程: 对于数据量比较大的情况(本例5800万 ...

  9. Excel文件首行固定前n行固定首列固定前n列固定

    1.首行首列固定 2.前n行固定 或者 前n列固定 选中第n+1行 或者 第n+1列,在冻结窗口下来选项中,选 "冻结拆分窗格"命令. 3.固定前n行前m列.(此处以n=3,m=5 ...

最新文章

  1. PHP 学习笔记 01
  2. 日常生活小技巧 -- 重装win10系统
  3. php递归多维数组为缩进列表,php – 缩进列表到多维数组
  4. rawquery 没扎到返回什么_Flutter之踩坑的日子(RawQuery的使用)
  5. windows查看端口号占用
  6. 齿轮箱常见故障数据_齿轮箱故障分析和维护使用
  7. brew 无法安装iterm2_MAC 安装OhMyZsh问题记录
  8. linux搭建博客day2
  9. FatMouse’ Trade
  10. 忍者神龟java_忍者神龟-邪恶重生
  11. Win10安装CUDA
  12. RRT算法及其部分改进算法介绍
  13. 产品研发项目管理软件哪个好? 1
  14. 分布式定时任务框架Uncode-Schedule技术介绍
  15. 数据库无法连接的几种情况
  16. unity3d 角色 武器 动画 和 blender 工作流
  17. java8 zoneid_java8之localDateTime, ZoneId, Instant使用
  18. 友谊:铭记恩惠忘记伤害
  19. 计算机创新创业1000字,大学生创新创业论文1000字
  20. 校园综合服务平台-微信小程序

热门文章

  1. 2022年全国大学生数学建模竞赛A题思路
  2. 《计算机组成与系统结构(第二版) 裘雪红 李伯成 西安电子科技大学出版社》课后习题答案(带解析)(三)
  3. 计算机讲座背景图,【直播】 以计算机图形研究视角一窥荧幕背后的魔法,讲座即将开始...
  4. 计科1111-1114班第一周讲义、课外作业(截止日期:2014年3月12日23点-周三晚,学委飞信通知同学)
  5. R语言求风险价值VaR Value at Risk
  6. ftp密码有特殊符号
  7. 任务书(L298N驱动小车)5.4--5.9——STM32F103RCT6,使用L298N驱动小车。
  8. 为developerWorks展示内容
  9. WARNING: Ignoring invalid distribution -orch (d:\ruanjian\anaconda\b\lib\site-packages)
  10. 技术分享 | 常见接口协议解析