Oracle查询中rownum与Order by查询的关系(取数据的前几条)
2013-06-26 11:12
267 查看
在开发应用的时候,把数据按照一定的规则排序后再取前几条数据这种操作是很平常的事情。
我们在Oracle中常用的就是order by,然后取得rownum小于多少的数据这种方法。不过如果对Oracle不熟悉,也许就会发现你写的SQL语句检索出来的值不正确,这个是为什么呢.因为Oracle在检索的时候,会首先把数据都检索出来,然后在排序段中进行排序(也就是说,先有rownum值,然后才order by排序)。假如你有一个SQL语句如下所示。
select emp_no from emp where rownum < 10 order by emp_no;
在检索的时候,会首先把数据检索出来,也就是把EMP表数据都检索出来,然后再Order by排序操作。因为
ROWNUM 数据是在排序前就检索出来的了,所以不能利用ROWNUM来取得排序后的前10条操作。那么应该如何操作呢。其实很简单,利用子查询,先排序,再取ROWNUM。如下所示
select emp_no from (select emp_no from emp order by emp_no) where rownum<10;
这样你就会发现你最后可以检索到你需要的结果了,但是这样写的缺点就是比上一个执行的会慢,性能上可能不是很好
我们在Oracle中常用的就是order by,然后取得rownum小于多少的数据这种方法。不过如果对Oracle不熟悉,也许就会发现你写的SQL语句检索出来的值不正确,这个是为什么呢.因为Oracle在检索的时候,会首先把数据都检索出来,然后在排序段中进行排序(也就是说,先有rownum值,然后才order by排序)。假如你有一个SQL语句如下所示。
select emp_no from emp where rownum < 10 order by emp_no;
在检索的时候,会首先把数据检索出来,也就是把EMP表数据都检索出来,然后再Order by排序操作。因为
ROWNUM 数据是在排序前就检索出来的了,所以不能利用ROWNUM来取得排序后的前10条操作。那么应该如何操作呢。其实很简单,利用子查询,先排序,再取ROWNUM。如下所示
select emp_no from (select emp_no from emp order by emp_no) where rownum<10;
这样你就会发现你最后可以检索到你需要的结果了,但是这样写的缺点就是比上一个执行的会慢,性能上可能不是很好
相关文章推荐
- Oracle查询中rownum与Order by查询的关系(取数据的前几条)
- Oracle查询中rownum与Order by查询的关系
- oracle中排序后查询前几条数据
- Oracle,查询 表空间对应的数据文件,用户和表空间对应关系
- oracle中在同一个表中分类查询不同类型的前几条数据
- Oracle查询数据库主外键关系
- Oracle查询前几条数据的方法
- oracle查询前几条数据
- oracle查询前几条数据
- Oracle查询前几条数据的方法
- Oracle查询前几条数据的方法
- Oracle查询前几条数据的方法
- ORACLE常用数据查询
- 关系数据标准语言SQL之数据查询
- ORACLE特殊数据查询技术
- 使用oracle闪回查询功能恢复之前删除的数据
- oracle查询数据表占用空间的大小
- ORACLE查询树型关系(connect by prior start with)
- hibernate关联表查询返回关系表数据问题
- oracle redact数据编译后 查询报错 不是selected表达式