关于Oracle数据库的rownum应用
它是Oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,以此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。
如以下语句将无法正常运行:
select student.*, student.rownum from student;
我们如果要将rownum这个伪字段动态产生的列显示出来,需要使用如下语句:
select t.*, rownum from student t;
如果我们在查询时加入了限制条件,则rownum又将动态生成。结论就是rownum是不会与任何一行进行绑定都是根据查询后的记录来生成的:
select t.*, rownum from student t where sage > 25;
由于rownum的特殊性,我们在使用rownum时必须注意以下事项:
- 如果希望找到学生表中的第一条学生信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学生的信息,使用rownum=2结果查不到数据。因为rownum始终从1开始,因此1以上的自然数在rownum做等于判断时都是false条件,所以无法查到rownum=n(n>1的自然数)。
select * from student where rownum = 1; -- 能查询到第一条记录
select * from student where rownum = 2; -- 不能查询第二条记录
- 如果想找到从第二行记录以后的记录,当时用rownum>2是查不出来记录的,原因是由于rownum是一个总是从1开始的伪列,Oracle认为rownum>n(n>1是自然数)这种条件依旧不成立,所以查不到记录。
select * from student where rownum > 2; -- 不能查询出记录
- 如果想找到第三条记录之前的记录,当使用rownum<3是能得到两条记录的。显然rownum对于rownum<n(n>1的自然数)的条件认为是成立的,所以可以找到记录。
select * from student where rownum < 3; -- 选择前两条记录
- 如果要查询后三条记录,则要考虑的情况又会比较复杂一些,比如我们按学号(SID)和年龄(SAGE)进行倒序排列,查询最后三条记录,检查下面两个sql语句的结果有何异同:
-- 正常返回最后三条记录
select * from student where rownum < 4 order by sid desc;
-- 返回了前三条记录
select * from student where rownum < 4 order by sage desc;
我们可以看到,同样的sql语句,只是排列序不一样,就导致了完全不一样的结果。两个语句的对比中可以看出在第二条语句中rownum并不是以SAGE列生成序列号,而是在插入记录时以主键列为参考生成的。之所以我们在使用第一条语句时可以成功取得最后三条,原因就在于第一条语句是按照主键进行排序的。
- 如果要按照非主键为依据来进行最后记录数的提取,我们需要使用复合查询语句。
select * from (select * from student order by sage desc) where rownum < 4;
- 有的时候我们需要对记录进行分页,这时我们会期望返回一个指定范围内的记录,如,返回第10至第20条,可使用如下sql语句:
select * from student where rownum < 20
minus -- 将两个记录集相减
select * from student where rownum < 10;
或者
select * from (select rownum r, student.* from student where rownum < 20 order by sid) where r >= 10;
- 提到rownum,不得不得到Oracle表中另外一个隐藏列:rowid,这是存在于每一个表中的用于唯一标识一行数据的由Oracle自动生成和管理的属性,我们可以认为这是Oracle数据表中的超键,在同一个数据库中,这个超键永远都不会有重复。rowid主要用于快速定位某一行数据,有点类似于一本书的页码,可以快速找到内容,常用于索引中。下面这条sql语句可以帮助我们查看每一行数据的rowid。
select student.*, rowid from student;
关于Oracle数据库的rownum应用的更多相关文章
- oracle数据库之rownum和rowid用法
Rownum 和 Rowid是Oracle数据库所特有的,通过他们可以查询到指定行数范围内的数据记录. 以下通过例子讲解: -- 为了方便,首先,查找dept表中的所有. select deptn ...
- Oracle数据库之rownum
1. 介绍 当我们在做查询时,经常会遇到如查询限定行数或分页查询的需求,MySQL中可以使用LIMIT子句完成,在MSSQL中可以使用TOP子句完成,那么在Oracle中,我们如何实现呢? Oracl ...
- ORACLE数据库编程
第一章 Oracle数据库基本概念 一.介绍 Oracle数据库系统是美国Oracle(甲骨文)公司提供的以分布式数据库为 核心的一组软件产品,是目前最流行的客户/服务器(Client/Server, ...
- oracle数据库分页原理
Oracle数据库的rownum 在Oracle数据库中,分页方式没有MySql这样简单,它需要依靠rownum来实现.Rownum表示一条记录的行号,值得注意的是它在获取每一行后才赋予.因此,想指定 ...
- 各种数据库分页语句整理以及Oracle数据库中的ROWNUM和ORDER BY的区别
.oracle数据库分页 select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>=s ...
- Oracle数据库——ROWNUM
Oracle数据库--ROWNUM 前言 刚学到了ROWNUM的用法,网上一搜,结果发现了有很多帖子,写的都很全.本着好记性不如烂笔头的原则,我还是决定自己手打一遍,当然下面也附上了我参考的链接. ...
- Oracle 数据库语句大全
Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...
- [转] JAVA读取excel数据(插入oracle数据库)
原文地址:http://blog.csdn.net/zczzsq/article/details/16803349 本实例做的是读取execl(只能读取.xls的execl,即只能读取03版的),如果 ...
- Oracle数据库基础知识
oracle数据库plsql developer 目录(?)[-] 一 SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...
随机推荐
- 大数据学习笔记——Hive完整部署流程
Hive详细部署教程 此篇博客承接上篇Hadoop和Zookeeper的部署教程,将会详细地对HIve的部署做一个整理,Hive相当于是封装在HDFS和Mapreduce上的一套sql引擎,只需要安装 ...
- 使用 yum 安装Docker(CentOS 7下)
使用 yum 安装(CentOS 7下) Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname ...
- angular实现draggable拖拽
前言:最近项目要实现一个拖拽功能,我在网上开始了各类搜寻,虽然后面因为数据原因舍弃了拖拽的这一需求,但是为了不辜负最近的研究,还是来记录一下. 场景需求:面试预约选时间节点,候选人之间是可以相互交换的 ...
- pcntl_signal(): Error assigning signal
错误原因:SIGSTOP(19)和SIGKILL(6)两个信号不能使用,进程间通信换成其他信号量就好了.
- 在 VSCode 中 Angular 的字符串报错的问题
使用 Angular 时,报错 [tslint] " should be ' 报错原因是因为 ESLint 的严格模式,限制了使用 ' ,甚至多一个空格都会报错. 我们只需要在 settin ...
- CCF-CSP题解 201712-3 Crontab
做完一定要仔仔细细地看一遍题目再交,之后发现坑点只能追悔莫及.比如这次"英文缩写(不区分大小写)"\(OwQ\). 给定多个周期性执行的任务,每个任务调度执行有时间的要求.求给定时 ...
- hdu 4725 The Shortest Path in Nya Graph (最短路+建图)
The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 消息队列MQ简介
项目中要用到RabbitMQ,领导让我先了解一下.在之前的公司中,用到过消息队列MQ,阿里的那款RocketMQ,当时公司也做了简单的技术分享,自己也看了一些博客.自己在有道云笔记上,做了一些整理,但 ...
- JS---DOM---为元素绑定事件和解绑事件的兼容代码
1. 绑定事件的兼容 function addEventListener(element,type,fn) { if(element.addEventListener){ element.addEve ...
- selenium的安装、报错和解决
selenium是的作用是模拟点击浏览器上的按钮,配合一个无头浏览器就可以快速解决一些前端需要加解密的功能. 第一步pip install selenium安装的第一步就是用pip把模块下载回来. ...