linuxsir首页 LinuxSir.Org | Linux、BSD、Solaris、Unix | 开源传万世,因有我参与欢迎您!
网站首页 | 设为首页 | 加入收藏
您所在的位置:主页 > Linux数据库 >

Oracle 分页查询与数据去重实例

时间:2019-05-10  来源:未知  作者:admin666

1.rownum字段

Oracle下select语句每个结果集中都有一个伪字段(伪列)rownum存在。
rownum用来标识每条记录的行号,行号从1开始,每次递增1。
rownum是虚拟的顺序值,前提是先排序

使用rownum需注意:
1.rownum的是在取数据的时候产生的序号 。当rownum和order by一起使用时,会首先选出符合rownum条件的记录,然后再进行排序。
2.rownum在过滤时只能使用: , = 。rownum在过滤完之后会重新排行号,如果是romnum n的话,过滤掉不满足条件的,重新排又从1开始还是不满足条件,再过滤最终会把所有数据都过滤掉

2.分页查询

--top n
--查询工资排名前五的员工信息

 --思路:先按工资进行排序,再根据行号过滤留下前5条记录
 --因为SQL语句的执行顺序是先执行select返回查询结果(行号在此时排好)再进行排序
 --所以先需要用子查询,返回排好序的查询结果
select t.* ,rownum from
(select * from emp order by sal desc)t
where rownum

--分页查询
--查询工资排名6~10的员工信息

 --思路:因为过滤完rownum字段也会随之变化,所以rownum不能使用大于号判断
 --所以还是要用子查询先把行号排好定下来(需要用别名与外层查询的rownum区分开来)
select * from
(select t.*, rownum rown
from
(select * from emp order by sal desc) t) where rown 5 and rown

3.rowid

rowid 是Oracle中每个表都有的一个实际存在的一个值,rowid的值是唯一的

4.数据去重

--先创建一张表往里面插入几条相同的数据
create table test01(id number(3),name varchar2(10))
insert into test01 values(123,'张三');
insert into test01 values(124,'李四');
insert into test01 values(125,'王五');
insert into test01 values(126,'张三');
insert into test01 values(127,'张三');
insert into test01 values(128,'李四');
insert into test01 values(129,'张三');
--数据去重
--思路:重复项进行分组,获取每一组最小(或最大)的rowid,删除不在此列的数据
delete from test01 where rowid not in(
(select min(rowid) from test01 t group by name)
);

去重前       

更多Oracle相关信息见Oracle 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

友情链接
  • JupyterHub 1.0 发布,命名服务器与TLS加密支持
  • Linux Kernel 5.1 正式发布,大量新功能
  • Red Hat Enterprise Linux 8.0(RHEL8)正式发布了
  • RStudio 1.2发布,改进对Python chunks,R脚本等的测试和支持
  • Firefox 66.0.4 发布,解决由于证书过期而导致的插件损坏问题
  • Ubuntu 14.04(Trusty Tahr)达到生命终点,现在升级到Ubuntu 18
  • 微软宣布推出“Windows Terminal”,受Linux风格启发终端
  • 印度将于5月成立国防网络局
  • Linux Mint 17达到了生命终结,用户需要升级到Linux Mint 18或19
  • Btrfs在Linux 5.2内核中获得一些有用的修复/改进
  • Unigine 2.8 发布,更好的植被与异步数据流
  • macOS版本的Microsoft Edge 浏览器下载地址泄露
  • GNU Linux
  • Linux Kernel 5.1 应该会在今天发布,更快的zRAM
  • Linux版的Microsoft Edge浏览器可能在工作中
  • Ubuntu Linux现在支持微软的第二代Windows Linux子系统(WSL 2 )
  • Visual Studio Code添加Java 12支持,Java代码操作和语言功能
  • 微软宣布推出Windows Subsystem for Linux 2(WSL 2)
  • Ubuntu 19.10代号为“Eoan Ermine”,将于10月17日发布
  • Brackets 1.14 发布,LSP支持(Ubuntu下安装方法)
  • 微软为Windows 10带来原生Linux内核,将成为WSL 2的一部分
  • 2019年GitHub上最受欢迎的7种编程语言
  • Linux 5.2应该可以解决许多AMD Ryzen笔记本电脑触摸屏/触摸板无
  • 适用于Linux的最佳Photoshop替代品
  • 谈判失败:Oracle 杀死 Java EE
  • DXVK 1.1.1 发布,解决召回的DXVK 1.1问题
  • Ant Design 3.17.0 发布,企业级UI设计语言
  • 音乐播放器 Qmmp 1.3.2 发布,修复Wayland会话问题
  • Linux新闻 第970页
  • Oracle 经典面试题分享
  • Oracle 中的SELECT 关键字(查询、检索)
  • Linux Kernel 5.1正式版发布,非长期支持版本
  • 微软在Windows 10中搞了个真正的Linux内核
  • 已是9102年,你熟知的C#还是你刚认识的模样吗?
  • 微软宣布.NET 5计划,支持跨平台、移动开发
  • PingCAP宣布TiDB Binlog组件正式开源
  • 知名Python库Requests作者Kenneth Reitz被指骗捐
  • Google将推出自动删除用户数据的功能
  • 谈判失败:Oracle杀死Java EE
  • 如何在Linux中将命令输出保存到文件
  • Python面向对象之单例模式
  • Ubuntu 18.04 Linux上安装Etherpad,基于Web的实时协作编辑器
  • Python3使用TCP编写一个简易的文件下载器
  • Slimbook - Ubuntu的电池优化工具
  • Python Numpy 数组的基本操作示例
  • 全盛娱乐游戏每天送6元
  • 现金娱乐平台
  • 真钱炸金花
  • 澳门威尼斯人度假村酒店
  • 3d之家