rownum伪行号-排行榜-分页
rownum伪行号-排行榜-分页
1.rownum 是oracle数据库特有的一个特性,它针对每一个查询(包括子查询),都会生成一个rownum用于对该次查询进行编号
2.每个rownum只针对当前select 查询有效,可以使用别名进行显示
例子:select rownum,emp.* from emp; --表名指定列(* 前面一定要别名指定列,或者表名指定列)
例子:查询出工资最高的前五名
--6个字句的执行先后 :from ,where,group by ,having,select ,select
--先排序,后筛选
(错误)select rownum,emp.* from emp where rownum<=5 order by sal desc; --先筛选后排序
select * from (select * from emp order by sal desc) where rownum<=5; --要先排序,后筛选
排行榜
例子:
--查询出工资水平在前5名的员工姓名,和工资
--理解:先排序,在通过rownum查询出前5条,在查看工资是否存在在这前5条里面
--本例包含三个查询,共有三个rownum
select ename ,sal from emp
where sal in(select * from ( select sal from emp order by sal desc) where rownum<=5) and rownum<=5;
例子:
--查询出工资最低的前五名
--注意:查询排行榜时,可能遇到边界问题
select rownum,emp.* from emp where rownum<=5 order by sal;
--查询出工资最低的前五名 的姓名和工资
select ename,sal from emp
where sal in (select * from (select sal from emp order by sal asc ) where rownum <=5) and rownum <=5;
分页查询
--分页计算参数:第几页,分页大小 --计算分页
--两种分页方法:rownum 和rownumde 别名
注意:rownum 不支持 > 和 >= 判断;rownum的别名支持>和>=判断
方法一
例子:
分页查询员工姓名,工资,入职日期;每页显示5条 分别查询出第1,2,3页数据
方法一:
理解:先在子查询中查询出前N页,在二次主查询查询出第N页;需要在子查询rownum别名
--首先用子查询查询出1*5 1-5页,再用主查询查询出大于(1-1)*5 >0 1-2-3-4-5 就是第1页
--首先用子查询查询出2*5 1-10页,再用主查询查询出大于(2-1)*5 >5 6-7-8-9-10就是第2页
--首先用子查询查询出3*5 1-15页,再用主查询查询出大于(3-1)*5 >5 11-12-13-14-15就是第3页
select * from (select rownum rn,emp.* from emp where rownum <=1*5) where rn >(1-1)*5
select * from (select rownum rn,emp.* from emp where rownum <=2*5) where rn >(2-1)*5
select * from (select rownum rn,emp.* from emp where rownum <=3*5) where rn >(3-1)*5
方法二:
--先在子查询中查询出所有的数据和数据的rownum,并使用别名表示,在第二次主查询中通过别名进行分页控制
理解:--首先用子查询查询出所有数据 ,在用主查询控制分页:(3-1)*5<=rn<=3*5 第3页
--首先用子查询查询出所有数据 ,在用主查询控制分页:(2-1)*5<=rn<=2*5 第2页
--首先用子查询查询出所有数据 ,在用主查询控制分页:(1-1)*5<=rn<=1*5 第1页
select * from (select rownum rn,emp.* from emp ) where rn<=3*5 and rn>=(3-1)*5;
select * from (select rownum rn,emp.* from emp ) where rn<=2*5 and rn>=(2-1)*5;
select * from (select rownum rn,emp.* from emp) where rn<=1*5 and rn>=(1-1)*5;
方法一的效率更高
rownum伪行号-排行榜-分页的更多相关文章
- oracle 行号和分页
1.行号是个伪列,rownum 永远按照默认的顺序生成 2.rownum 只能使用< <= 不能使用> >=(原因是oracle数据库是行式数据库,像盖楼一样,没有第一层就排 ...
- EasyPOI校验实现返回错误信息及行号
IExcelModel 获取错误信息 public class ExcelVerifyEntity implements IExcelModel { private String errorMsg; ...
- css伪类实现行号自动填充
css伪类实现行号自动填充 大多数时候我们需要行号自动填充的时候我们可以 大多数时候是插入元素, 在元素里用js填入行号,或者用 ol > li 实现行号填充, 对于上面的方式,都不太灵活,而且 ...
- MySQL查询获取行号rownum
MySQL中可以使用变量产生行号,下面是2个简单例子: 使用工具:MySQL Workbench 说明:表heyf_10中字段,empid(员工工号).deptid(部门编号).salary(薪资): ...
- DOJO-dojox.grid.EnhancedGrid(带刷新函数,分页工具栏,复选框,行号等功能)
转自:http://biancheng.dnbcw.info/javascript/395865.html dojo.require("dojox.grid.EnhancedGrid&quo ...
- Sqlite中使用rowid来表示行号,用于分页。
在SQLite的查询结果中显示行号,可以使用select rowid as RowNumber ,* from WSCLanguage: select rowid as RowNumber ,* fr ...
- SQL基础--ROWNUM伪列
ROWNUM伪列 的概念: rownum表示的是一个数据行编号的伪列,它的内容是在用户查询数据时,为用户动态分配的一个数组(行号). 注意它是随机生成的,并不是和某一行数据绑定在一起的. 观察rown ...
- sql使用row_number()查询标记行号
背景: 在分页功能中,记录需分页显示,需要row_number()函数标记行号. 数据表: 排序之前数据表显示: sql语句: select ROW_NUMBER() over(order by id ...
- Oracle中ROWNUM伪列和ROWID伪列的用法与区别
做过Oracle分页的人都知道由于Oracle中没有像MySql中limit函数以及SQLServer中的top关键字等,所以只能通过伪列的方式去满足分页功能,在此,不谈分页方法,只从根本上去介绍这两 ...
随机推荐
- VS2012 Update 2: 0x80040154 corrupt install when starting the debugger
使用VS2012開發console program ,发现生成32位的exe文件在別的机上不能正确运行,有文章說update1可以解決這個問題,如下 Setup.exe is not a valid ...
- leetcode解题报告(3):Search in Rotated Sorted Array
描述 Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 m ...
- Java集合总结(一):列表和队列
java中的具体容器类都不是从头构建的,他们都继承了一些抽象容器类.这些抽象容器类,提供了容器接口的部分实现,方便具体容器类在抽象类的基础上做具体实现.容器类和接口的关系架构图如下: 虚线框表示接口, ...
- 在Android中使用OpenGL ES进行开发第(二)节:定义图形
一.前期基础知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGLES绘制2D ...
- JS 的 new 到底是干什么的?
大部分讲 new 的文章会从面向对象的思路讲起,但是我始终认为,在解释一个事物的时候,不应该引入另一个更复杂的事物. 今天我从「省代码」的角度来讲 new. --------------------- ...
- 为一台全新的电脑构建JavaEE开发环境
1.开发以外的常用软件 2.下载各种资源(x64,2017年8月)JDKhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow ...
- python网络爬虫(一):网络爬虫的定义
网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开 ...
- startuml 3 windows 破解教程
1.startuml 的下载地址:http://staruml.io/download 2.下载安装之后,安装node 服务.
- 从 10.x 到 ArcGIS Pro 的 Python 迁移
与 ArcGIS Pro 结合使用 Python 的方式与包括 ArcGIS Desktop.ArcGIS Server 以及 ArcGIS Engine 在内的其他 ArcGIS 产品不同. 地理处 ...
- Linux -bash: redis-cli: command not found(亲测可行)
Linux 安装完redis单独用命令: ? 1 redis-server 报错: ? 1 -bash: redis-server: command not found 说明redis-server不 ...