SQL语句中 我想查找从第三条开始到第六条怎么写?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL语句中 我想查找从第三条开始到第六条怎么写?相关的知识,希望对你有一定的参考价值。
Oracle数据库:select b.* from (select a.* ,rownum as vseq from 表名 a where rownum <= 6) b where b.vseq >= 3;SqlServer数据库:select top 6 a.* from 表名 a where a.主键 not in (select top2 b.* from 表名 b)mysql数据库:select a.* from 表名 a limit 3, 3 参考技术A 如果有ID字段:SELECT * FROM 表 WHERE ID>=3 AND ID<=6
如果没有
SELECT TOP(6) FROM 表
把recordset用循环或者两遍语句 movenext两次
循环4次得到3~6条记录 参考技术B select *from 表名 where 字段名 between 1 and 2 从1到2 参考技术C 用ROW_INDEX 呗.
Mysql与Oracle的分页查询比较
MySql分页查询语句
下列查询语句中m代表行数的索引默认从0开始类似于pl/sql中的游标0表示从第一条开始n表示向后查询多少条数据。
例如:
select * from emp limit 2,3表示查询第三条数据到第六条数据(包前不包后)也就是第三条数据包括第三条数据不包括第六条数据 也就是 3, 4,5条记录
select * from buss_stu_info limit m,n;
Oracle数据库分页查询
一层分页查询:
及时数据量足够大几乎也不会受到影响查询速率足够快,一般在写这类sql语句是个人将sql语句分为两层,内层,外层,在内层中小于最大的,在外层中大于最小的,(最大最小你来设定)
select * from (select rownum as rn,empno,ename from emp e where rownum<10) ta where ta.rn>5;
两层分页查询:
Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。
分页查询格式:
SELECT *
FROM (SELECT a.*, ROWNUM rn
FROM (SELECT *
FROM table_name) a
WHERE ROWNUM <= 40)
WHERE rn >= 21
其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。
上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。
选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。这是,查询语句如下:
SELECT *
FROM (SELECT a.*, ROWNUM rn
FROM (SELECT *
FROM table_name) a)
WHERE rn BETWEEN 21 AND 40
对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。
这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。
而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多
本文出自 “随笔” 博客,请务必保留此出处http://lishouxiang.blog.51cto.com/8123559/1854621
以上是关于SQL语句中 我想查找从第三条开始到第六条怎么写?的主要内容,如果未能解决你的问题,请参考以下文章