"Oracle 中的 ROWNUM 和 DISTINCT" Oracle 中的 ROWNUM 和 DISTINCT 是两个非常重要的关键词,它们在查询数据时发挥着至关重要的作用。然而,许多开发者在使用这两个关键词时,却常常会遇到一些不太理解的地方,例如,当 DISTINCT 和 ROWNUM 一起使用时,为什么不能得到预期的结果?下面我们将详细地解释 ROWNUM 和 DISTINCT 的工作原理,并分析为什么它们在一起使用时会出现一些问题。 lets' talk about ROWNUM。ROWNUM 是 Oracle 系统赋予查询返回的行的编号,它是从 1 开始的,这个伪字段可以用于限制查询返回的总行数。但是,ROWNUM 的真正含义往往被人误解。很多人认为 ROWNUM 是在查询结果集整个返回后再分配的顺序编号,但实际上 ROWNUM 是在 Oracle 系统顺序分配的,从查询返回的第一行分配的是 1,第二行是 2,依此类推。这样,ROWNUM 可以用于限制查询返回的总行数。 让我们来探讨 DISTINCT 的工作原理。DISTINCT 是等记录集全部查询出后,然后进行排序,最后再删除重复数据,而不是边查边删除重复数据。很多人认为 DISTINCT 是边查边删除重复数据的,但实际上不是这样。DISTINCT 只有在查询结果集返回后才开始工作。 现在,让我们来分析为什么当 DISTINCT 和 ROWNUM 一起使用时,不能得到预期的结果。例如,我们可以使用以下 SQL 语句: SELECT DISTINCT a.access_id, a.link_id FROM asn_access a, asn_res_link b WHERE a.access_id = '000000000000000000035696' AND a.link_id = b.link_id AND a.delete_state = '0' AND b.delete_state = '0' AND rownum < 3 这个 SQL 语句的结果可能不是我们预期的结果。为什么呢?因为 ROWNUM 首先对查询出来的记录进行标号,然后 DISTINCT 再开始工作,删除重复数据。所以,只有第一条记录满足 ROWNUM < 3 的条件,其他记录都被删除了。 那么,如何才能得到预期的结果呢?我们可以使用子查询的方式,先使用 DISTINCT 返回结果,然后再使用 ROWNUM 限制结果: SELECT c.access_id, c.link_id FROM ( SELECT DISTINCT a.access_id, a.link_id FROM asn_access a, asn_res_link b WHERE a.access_id = '000000000000000000035696' AND a.link_id = b.link_id AND a.delete_state = '0' AND b.delete_state = '0') c WHERE rownum < 3 这样,我们就可以得到预期的结果了。 ROWNUM 和 DISTINCT 是两个非常重要的关键词,但它们的工作原理却非常不同。只有当我们正确理解它们的工作原理时,才能正确地使用它们,避免一些不必要的错误。

































- 粉丝: 11
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 电子商务网站的分析与实现.doc
- 提高计算机信息管理能力的策略分析.docx
- 嵌入式系统开发平台化浅析.docx
- 混合学习法在高职高专计算机教学中的应用研究.docx
- 《计算机的硬件组成》学习工具制作综述.docx
- 《计算机多媒体技术》专业教学计划.doc
- (源码)基于C++编程语言的Orion II CanSat项目.zip
- 8PSK通信系统的蒙特卡罗仿真研究--最终.doc
- 基于TC35模块的GSM远程智能家居控制系统的方案设计书大学本科方案设计书好.doc
- 大数据时代背景下财务会计工作面临的机遇、挑战和对策.docx
- 月软件设计师模拟试题上午试卷.doc
- 拓贸隆综合布线大楼方案.doc
- 基于B-S结构变电运维大数据系统及移动终端开发应用.docx
- 国外卫星在轨操作系统发展分析.docx
- S7-300400PLC的编程技术-.ppt
- 基于组件的电子商务招投标平台的设计与实现.docx


