Oracle中的排序sql语法
第一种
select a.*
from (select b.*, rownum row_num
from (select * from ac order by ac.rowid) b
where rownum < 200) a
where a.row_num > 100
注意:这里嵌套了三层查询,最里层的一定要排序,如果不排序,查出来的数据是错误的
如何在Oracle数据库中查找某一范围的数据 比如查询100到200之间的数据
这就用到了Oracle的中每张表中隐藏的rownum
select * from ac where rownum <= 100 这条语句是可以的执行的
但是 如果
select * from ac where rownu > 200 这条语句就执行不了,因为rownum是根据查询的结果集来对记录进行编号,
所以当你查询rownum大于2的记录时会得到一个空的结果集。
因为当oracle查询得到第1条记录时,发现rownum为1不满足条件,
然后就继续查询第2条记录,但此时第2条记录又被编号为1(也即rownum变为1),
所以查询得到的始终是rownum=1,因此无法满足约束,最终查询的结果集为空。
所以有以下三种方法:比如查询ac表中100到200条之间的数据
1.使用子查询的方式
select * from (select b.*,rownum row_num from ac b order by rowid) a from a.row_num >100 and a.row_num <200 (这里查相等时也可以用between and)
2.使用集合减minus运算,该操作返回在第一个select中出现而不在第二个select中出现的记录。
select * from ac where rownum < 200 minus select * from ac where rownum < 100;
3.使用使用集合交运算符intersect,这里绕了一个弯(不过这个弯实现了rownum大于某个数的查询),它是首先利用A的方式查询得到所有rownum大于100的记录,然后再与rownum小于200的记录集合做交运算
select aa,bb,cc
from (select aa,bb,cc,rownum as num from ac b)
where num > 100
intersect
select aa,bb,cc from ac where rownum < 200;
以下是一些参考链接:
http://blog.csdn.net/mitedu/article/details/3584399
http://www.iteye.com/topic/186927
http://www.iteye.com/topic/197531
http://m635674608.iteye.com/blog/1455080
第一种
select a.*
from (select b.*, rownum row_num
from (select * from ac order by ac.rowid) b
where rownum < 200) a
where a.row_num > 100
注意:这里嵌套了三层查询,最里层的一定要排序,如果不排序,查出来的数据是错误的
如何在Oracle数据库中查找某一范围的数据 比如查询100到200之间的数据
这就用到了Oracle的中每张表中隐藏的rownum
select * from ac where rownum <= 100 这条语句是可以的执行的
但是 如果
select * from ac where rownu > 200 这条语句就执行不了,因为rownum是根据查询的结果集来对记录进行编号,
所以当你查询rownum大于2的记录时会得到一个空的结果集。
因为当oracle查询得到第1条记录时,发现rownum为1不满足条件,
然后就继续查询第2条记录,但此时第2条记录又被编号为1(也即rownum变为1),
所以查询得到的始终是rownum=1,因此无法满足约束,最终查询的结果集为空。
所以有以下三种方法:比如查询ac表中100到200条之间的数据
1.使用子查询的方式
select * from (select b.*,rownum row_num from ac b order by rowid) a from a.row_num >100 and a.row_num <200 (这里查相等时也可以用between and)
2.使用集合减minus运算,该操作返回在第一个select中出现而不在第二个select中出现的记录。
select * from ac where rownum < 200 minus select * from ac where rownum < 100;
3.使用使用集合交运算符intersect,这里绕了一个弯(不过这个弯实现了rownum大于某个数的查询),它是首先利用A的方式查询得到所有rownum大于100的记录,然后再与rownum小于200的记录集合做交运算
select aa,bb,cc
from (select aa,bb,cc,rownum as num from ac b)
where num > 100
intersect
select aa,bb,cc from ac where rownum < 200;
以下是一些参考链接:
http://blog.csdn.net/mitedu/article/details/3584399
http://www.iteye.com/topic/186927
http://www.iteye.com/topic/197531
http://m635674608.iteye.com/blog/1455080