mysql 和oracle分页查询
来源:互联网 发布:怎么linux安装dhcp服务 编辑:程序博客网 时间:2024/03/29 10:15
1.Mysql分页查询
1.1 LIMIT
LIMIT关键字是MySQL中特有的。它与其他种类数据库SQL语言中的TOP关键字作用类似,前者放在整个SELECT语句的最后面,而后者则必须放在输出字段列表之前(紧跟SELECT关键字的后面)。MySQL的LIMIT关键字的“亮点”在于除了它可以确定显示记录的条数外,还可以确定显示记录的起始位置,这相对于其它关系数据库的TOP关键字只能确定显示最前面的若干条记录而言有一定的优势。SQL的limit语法的如以下形式SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset当省略offset的时候,offset作为0处理,表示提取查询到的前rows条数据;当offset>=0时候,表示提取查询到的从offset开始的rows条数据;此时如果rows<0表示提取查询到的从offset开始的所有数据当offset<0的时候,表示提取查询到的除出后rows条数据的所有数据,即剔除last row-rows到last rows之间的-rows条数据另外,如果rows大于实际查询的数据条数,则取rows为实际查询的数据条数。二、实例实例1检索记录行 6-15SELECT * FROM table LIMIT 5,10;为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定rows参数为 -1:实例2检索记录行 96-lastSELECT * FROM table LIMIT 95,-1;如果只给定 rows 参数,它表示前rows 条数据;换句话说,LIMIT n 等价于 LIMIT 0,n实例3检索前 5 个记录行SELECT * FROM table LIMIT 5;实例4返回第6-15行数据select * from table LIMIT 5,10;或select * from table LIMIT 5;或select * from table LIMIT 0,5;实例5返回0到last row-rows的数据select * from class limit 10 , -1或select * from class limit -1 OFFSET 10假如现在class表中有100条数据,则返回的是0开始的90条数据,即0到(100-10)1.2 MySql分页查询mysql中分页查询有两种方式, 一种是使用COUNT(*)的方式,具体代码如下
SELECT COUNT(*) FROM foo WHERE b = 1;//条数
SELECT * FROM foo WHERE b = 1 LIMIT 100,10;//具体数据
另外一种是使用SQL_CALC_FOUND_ROWS
SELECT SQL_CALC_FOUND_ROWS a FROM foo WHERE b = 1 LIMIT 100, 10;
SELECT FOUND_ROWS();
第二种方式调用SQL_CALC_FOUND_ROWS之后会将WHERE语句查询的行数放在FOUND_ROWS()之中,第二次只需要查询FOUND_ROWS()就可以查出有多少行了。
首先原子性讲,第二种肯定比第一种好。第二种能保证查询语句的原子性,
第一种当两个请求之间有额外的操作修改了表的时候,结果就自然是不准确的了。
而第二种则不会。但是非常可惜,一般页面需要进行分页显示的时候,
往往并不要求分页的结果非常准确。即分页返回的total总数大1或者小1都是无所谓的。
所以其实原子性不是我们分页关注的重点。
结论:SQL_CALC_FOUND_ROWS和COUNT(*)的性能在都使用covering index的情况下前者高,在没使用covering index情况下后者性能高。所以使用的时候要注意这个。
参考原文:http://www.cnblogs.com/yjf512/archive/2012/10/09/2717102.html
2.oracle分页查询
select * from teacher where tno>1090
--回忆之前的MYSQL分页select * from teacher limit (pageIndex-1)*pageSize,pageSize
--oracle的分页 需要伪列? 什么是伪列!--伪列 可以从表中查询的到!每个表都有这个伪列!但是不能对伪列--进行增删改操作!伪列的值是不允许被改变的--rowid:存储的是表中行的存储地址,是唯一的!可以使用rowID定位到表中的一行--增长的规律: 最后一个字母。默认从A开始 A-Z a-z 0-9 + / 倒数第二位变成B--rownum:返回的是查询结果中 行的序号!--rownum只能对=1或者<n进行筛选,不能对>n进行筛选--如果想使用>n来查询,那么必须通过子查询建立临时表,--然后让rownum成为临时表中的列,然后限定条件使用伪列的别名
--查询教师表中的薪水最高前5名select * from (select * from teacherorder by sal desc)where rownum<6
--查询教师表中的薪水第5名select * from(select t.*,rownum rw from(select * from teacher order by sal desc) t)where rw=5
--使用分析函数 排序select * from (select t.*,dense_rank() over(order by sal desc) rankfrom teacher t)where rank=5
--查询 教师表中的薪水最高5 -9select * from(select t.*,rownum rw from(select * from teacher order by sal desc) t)where rw>=5 and rw<=9
参考http://www.cnblogs.com/liu-chao-feng/p/5890346.html
- mysql 和oracle分页查询
- 分页查询 Oracle 和 mySql的不同:
- Mysql和Oracle数据库中的分页查询
- Oracle、MYSQL、sqlserver和DB2分页查询
- Oracle和MySQL分页查询SQL语句
- Oracle和Mysql的分页查询语句
- mysql & oracle 分页查询
- oracle mysql 分页查询
- mysql、oracle 分页查询
- mysql,sqlServer,oracle分页查询
- oracle 与mysql分页查询
- mySQL与Oracle分页查询
- Oracle、 Mysql 、 SQLserver 分页查询
- Oracle、MySql数据分页查询
- sqlserver oracle mysql 分页查询
- mysql、oracle分页查询数据库
- MySQL、oracle分页原生查询
- Oracle与mysql分页查询
- 牛客网 之 百度2017春招笔试真题编程题集合(共5题)
- Codeforces777D Cloud of Hashtags
- 使用工厂设计模式的场景
- Yii2中多表关联查询
- 性能最高最稳定的Xml解析SDK库
- mysql 和oracle分页查询
- pod lib create 无法自动生成项目问题
- RecycleView(一)
- 冒泡排序算法
- Android URL Scheme协议使用
- Rxjava入门学习资料
- Fragment
- springboot(十):邮件服务
- JS事件对象