在oracle分页查询中,我们采用类似以下所示的公认的比较高效的数据库分页查询语句(Effective Oracle by Design中有描述、众多oracle使用者也做过测试)。
写道 SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= n) WHERE RN > m 这里的ROWNUM是一个伪列,
它是oracle为查询结果所编的一个号,第一行的ROWNUM为1,第二行为2,以此类推。 因为oracle是按块进行读取数据的,
如果数据按顺序存储,则可能使读取出来的数据是按顺序的,给用户误解为默认排序。
事实上,oracle没有进行任何排序操作,如果sql没有要求排序,oracle会顺序的从数据块中读取符合条件的数据返回到客户端。
所以在没有使用排序sql的时候,分页返回的数据可能是按顺序的,也可能是杂乱无章的,这都取决与数据的存储位置。
在分页查询过程中,如果数据的物理位置发生了改变,就可能会引起分页数据重复的现象。 所以,要正确使用分页查询,sql语句中必须有排序条件。
但是,在有排序条件的时候,仍然会出现数据重复的现象,这是为什么呢?
通过了解oracle的排序机理就会明白,出现这种情况的原因是因为排序列值的不唯一性。 Oracle这里使用的排序算法不具有稳定性,
也就是说,对于键值相等的数据,这种算法完成排序后,不保证这些键值相等的数据保持排序前的顺序。
解决的方法是在后边增加一个唯一性列,比如主键。
所以解决方法如下(两个条件必须同时满足):
1.sql语句中需要有排序条件。
2.排序条件如果没有唯一性,那么必须在后边跟上一个唯一性的条件,比如主键。
相关推荐
内涵oracle rownum的详细讲解。
NULL 博文链接:https://xiaoxinshome.iteye.com/blog/1890709
rownum是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数 从emp表中查询薪水排在前三位的记录 select * from( select * from emp order by sal desc ) where rownum<=3 结果如下: 原创文章 4获赞...
ORACLE是ORACLE公司的数据产品,支持海量数据存储,支持分布式布暑,支持多用户,跨平台,数据安全完整性控制性能优越,是一个ORDBMS,一般用在大型公司。 2、能不能设计数据库?如何实现数据库导入与导出的更新 ...
10.oracle分页查询 21 (1)删除重复记录 22 11.oracle合并查询 24 12.oracle连接 25 13.oracle函数 26 (1)字符函数 26 (2)数学函数 26 (3)日期函数 27 (4)给表取别名的时候,不能加as;但是给列取别名,是可以加as 27...
发现用一个type进行排序后,做分页查询,第一页的数据和第二页的数据有重复 怀疑是order by 时,两次排列的顺序不一致 看到业务描述的问题可以得到的结论order by排序不稳定,还有第一个印象就是,type肯定是不唯一...
§1.1.1 Oracle数据字典 23 §1.1.2 表空间与数据文件 24 §1.1.3 Oracle实例(Instance) 24 §1.2 Oracle文件 26 §1.2.1 数据文件 26 §1.2.2 控制文件 26 §1.2.3 重做日志文件 26 §1.2.4 其它支持文件 26 §...
数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询) 数据控制语言Data Controlling Language(DCL),用来...
十五、 排名分页问题 30 15.1什么是rownum 30 15.2 where rownum的执行过程 30 15.3 where rownum=5的执行过程 30 十六、 约束constraint 31 16.1约束的类型 31 16.2 primary key:主键约束 31 16.3 not null:非空...
实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 获取数组当前的键名和值 162 实例135 ...
实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 获取数组当前的键名和值 162 实例135 ...
74 实例064 利用选择控件实现复杂查询 76 2.7 ListView控件应用 78 实例065 ListView列表拒绝添加重复信息 78 实例066 将数据库数据添加到ListView控件 80 实例067 用ListView控件制作导航...
14、查询从多少行到多少行的记录(可以用在web开发中的分页显示) select * from ( select rownum row_id,b.* from (select a.* from sys_oper a) b ) where row_id between 15 and 20 15、对公共授予访问权 ...
4.5 抑制数据重复 4.6 计算字段 4.6.1 常量字段 4.6.2 字段间的计算 4.6.3 数据处理函数 4.6.4 字符串的拼接 4.6.5 计算字段的其他用途 4.7 不从实体表中取的数据 4.8 联合结果集 4.8.1 简单的...
4.5 抑制数据重复 4.6 计算字段 4.6.1 常量字段 4.6.2 字段间的计算 4.6.3 数据处理函数 4.6.4 字符串的拼接 4.6.5 计算字段的其他用途 4.7 不从实体表中取的数据 4.8 联合结果集 4.8.1 简单的...
4.5 抑制数据重复 4.6 计算字段 4.6.1 常量字段 4.6.2 字段间的计算 4.6.3 数据处理函数 4.6.4 字符串的拼接 4.6.5 计算字段的其他用途 4.7 不从实体表中取的数据 4.8 联合结果集 4.8.1 简单的...
4.5 抑制数据重复 4.6 计算字段 4.6.1 常量字段 4.6.2 字段间的计算 4.6.3 数据处理函数 4.6.4 字符串的拼接 4.6.5 计算字段的其他用途 4.7 不从实体表中取的数据 4.8 联合结果集 4.8.1 简单的...
实例081 DataGridView控件的分页功能 108 实例082 从DataGridView控件拖放数据至TreeView控件 113 实例083 在DataGridView控件中实现合并单元格 116 实例084 在DataGridView控件中显示图片 118 实例085 为...