【SQL】Oracle和Mysql的分页、重复数据查询(limit、rownum、rowid)
上周三面试题有两道涉及Oracle的分页查询,没有意外地凉了,现在总结一下。
· Mysql
mysql的分页可以直接使用关键字limit,句子写起来比较方便。
语法:
① limit m,n
-- (m+1)为取出行的起始序号
-- n 为取出的全部行数
select * from table where...
limit m,n -- 上述语句等价于
select * from table shere...
limit pageSize offset firstIndex
示例:
-- 显示student表31~50行,共20行的结果
select * from student limit 30,20 -- 或者
select * from student limit 20 offset 30
② limit m
-- 表示从第一条记录行开始取出m条数据
select * from table where...
limit m
示例:
-- 表示 85分以上的前十名学生
select * from student where score>85 order by score DESC
limit 10
· Oracle
Oracle有两个方法进行分页,一个是row_number() over函数,一个是自带的ROWNUM关键词。
①rownum(伪行列)
rownum表示一条记录的行数,如果需要分页,至少有两层查询,内层查询符合条件的全部rownum,分页信息在外层控制。
注意:rownum是对结果集的编序排列,始终是从1开始,所以rownum直接使用时不允许使用>号
select * from
(select a.*,ROWNUM rn from(sql) a
where ROWNUM<=(firstIndex+pageSize)) -- 内层控制最大值
where rn>firstIndex -- 外层控制最小值
示例,结果集每页20行,现在要展示第二页的数据(即21~40行):
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40 -- 末序号,20*2
)
WHERE RN >= 21 -- 起始序号
②row_number() over函数
通常更多地应用于排序的场景。例如,根据成绩倒叙,选取前21~40名学生
select * from
(select a.*,row_number() over(order by a.score DESC) orderNum from student a)
where orderNum between 21 and 40
③ Rowid
rowid是数据的详细地址(表示每一列对应的十六进制物理地址值),通过rowid,oralce可以快速的定位某行具体的数据的位置。
对于同一条记录, 查询条件不同, rownum会不同, 但是rowid将不变。通常rowid可用于剔除重复数据
一、重复数据根据单字段判断
-- 首先查出该字段重复的数据
select * from [TABLE] group by [ID] having count[ID] > 1
-- 字段重复的数据中,找出rowid较小的那些数据
select min(rowid) from [TABLE] group by [ID] having count(*) > 1
-- 删除多余的数据,只保留重复数据中rowid较小的那个
delete * from [TABLE]
where [id] in ( select * from [TABLE] group by [ID] having count[ID] > 1 )
and
rowid not in ( select min(rowid) from [TABLE] group by [ID] having count(*) > 1 )
二、重复数据根据多字段判断
-- 首先查出多字段重复的数据
select * from 表 a
where (a.[ID],a.[field]) IN
(
select [ID], [filed] from [TABLE]
group by [ID],[field] having count(*) > 1
)
-- 删除多余的数据,且rowid为小的
delete from 表 a
where (a.ID,a.[field]) in
(select ID,[field] from 表 group by ID,[field] having count(*) > 1)
and
rowid not in (select min(rowid) from 表 group by ID,[field] having count(*)>1)
SqlServer的top分页法
select top num from table_name
where...
举例:
选择student表中score排行最高的10位
select top 10 from student order by score
【SQL】Oracle和Mysql的分页、重复数据查询(limit、rownum、rowid)的更多相关文章
- Oracle和MySql的分页查询区别和PL/SQL的基本概念
Oracle和MySql的分页查询区别: Oracle的分析查询,之前Oracle的分页是使用伪列 ROWNUM 结合子查询实现,mysql的分页更简单,直接使用 LIMIT 关键字就可以实现 ...
- atitit。mssql sql server 转换mysql 及 分页sql ast的搭建
atitit.mssql sql server 转换mysql 及 分页sql ast的搭建 1. 主要的的转换::函数的转换,分页的转换 1 2. 思路::mssql sql >>as ...
- oracle或mysql定时增量更新索引数据到Elasticsearch
利用kettle Spoon从oracle或mysql定时增量更新数据到Elasticsearch https://blog.csdn.net/jin110502116/article/details ...
- mysql找出重复数据的方法
mysql找出重复数据的方法<pre>select openid,count(openid) from info group by openid,jichushezhi_id HAVING ...
- oracle sqlserver mysql数据库分页
1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM tabl ...
- MySQL中删除重复数据的简单方法,mysql删除重复数据
MYSQL里有五百万数据,但大多是重复的,真实的就180万,于是想怎样把这些重复的数据搞出来,在网上找了一圈,好多是用NOT IN这样的代码,这样效率很低,自己琢磨组合了一下,找到一个高效的处理方式, ...
- oracle至mysql该指南的数据模式()任意数据源之间的跨导应用
为了产生的一些资源的库的释放.需要API模块迁移到mysql在,需要引导数据. 试用oracle to mysql工具.当迁移错误不说,如此大量的数据的,有了这样简陋的工具是不太可靠. 意外的发现工具 ...
- mysql重复数据查询
假设有表test mysql> select * from test; +----+------+------+ | id | name | sex | +----+------+------+ ...
- mysql中删除重复数据
//首先我们需要知道我们重复的都有哪些数据, //第一步:进行对数据表进行分组,group by. //第二步:进行后通过having进行限制筛选,条数大于等于2的 //第三步:进行多表删除. //案 ...
随机推荐
- 3、Angular2 Input
3.理解@input
- 分页存储过程ROW_NUMBER() over(order by pid desc)
分页存储过程 : create proc usp_GetMyPhotos @pageIndex int, --当前页码 @pageSize int, --每页多少条 @pageCount ...
- C#中的MD5加密
1 using System.Web.Security; 2 string pswd = FormsAuthentication.HashPasswordForStoringInConfigFile ...
- 2017年10月9日 冒泡&去重复习
今天看了一下,就是数组跟js还是不太熟悉 冒泡排序 var arr = [4, 2, 1, 3, 6, 5]; for(var i = 1; i < arr.length; ...
- common-jdbc:一个基于SpringJdbcTemplate的高性能数据库操作工具类库
项目地址:https://gitee.com/cnsugar/common-jdbc 一.简介 基于SpringJdbcTemplate的高性能数据库操作工具类库,支持mysql.oracle数据库, ...
- Bootstrap组件介绍
一.下拉菜单 用于显示链接列表的可切换.有上下文的菜单.下拉菜单的 JavaScript 插件让它具有了交互性. 1.实例 将下拉菜单触发器和下拉菜单都包裹在 .dropdown 里,或者另一个声明了 ...
- Nginx管理(一)
一.Nginx介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务. 1.Nginx历史和特性 Nginx是由伊戈尔·赛索耶夫为俄罗斯 ...
- 常用DOM结构方法总结
---内容开始--- 获取元素的方法: getElementById() 通过ID名获取元素 getElementsByTagName() 通过元素(标签)名称 getElementsByClassN ...
- javascript实现数据结构:线索二叉树
遍历二叉树是按一定的规则将树中的结点排列成一个线性序列,即是对非线性结构的线性化操作.如何找到遍历过程中动态得到的每个结点的直接前驱和直接后继(第一个和最后一个除外)?如何保存这些信息? 设一棵二叉树 ...
- 【Linux】文件操作函数(系统调用函数)
重点在于学习--思路与方法 举一反三 一.文件描述符 系统分配给文件的数字编号 二.函数学习 P.S.Man命令使用方法 manual 前三个章节 命令:系统调用函数:库函数 man read //r ...