在ms sqlserver中,取满足条件的前几行可以使用select top语句,但在oracle中并没有这样的语句,
我从网上看到了一种实现select * (select * from talbename) where rownum <=100 order by rownum asc这样的确可以实现与select top 相同的效果
不过我想请问,这条语句是先查找出所有结果,然后再返回前100行?
还是查找到符合条件的100行记录就停止查找?
我从网上看到了一种实现select * (select * from talbename) where rownum <=100 order by rownum asc这样的确可以实现与select top 相同的效果
不过我想请问,这条语句是先查找出所有结果,然后再返回前100行?
还是查找到符合条件的100行记录就停止查找?
解决方案 »
- spotlight on oracle报数据库异常,请指教如何处理?
- oracle 条件过滤 请高手指点
- oracle创建包报错
- 用exp命令导出特定的表如何带有触发器,视图,序列,包
- 因主机目标不存在,连接失败。。。。。
- 请问哪里有oralce7i的电子书下载啊,
- 关于SQLpuls的使用(初学者)
- 除了PB,还有其他好的客户端吗?
- 如何选择使用数据库(sql server 和 Oralce ),它们之间的差别是什么,请各位数据库大虾参与讨论,公司要我出个方案,急啊!
- 用ASP访问oo4o(oracle objects for ole)调用函数时出错,请帮忙看看
- oracle 时间差的计算
- 求SQL语句
当然要检索所有的结果,否则怎么知道那100条记录就是符合条件的
select * (select * from talbename order by UUID) where rownum <=100 实际上我是想在分页上使用,每页查100条,用户按下一页时候再查100条,而不是一次全查出来
按照1楼说的,似乎这条语句达不到我想要的效果啊
(select a.*,row_number()over(order by uuid)rn from tablename a)
where rn>=beginnum and rn<=endnum
order by rn
不过我查了下 rownum的解释,这是个伪列,标明当前记录是查询到的第几条,
如果这样的话,
select * from table where rumber <= 100 就可以查询出前100条
然后我可以记录下当前第100条的记录的中的ID,以后每一页,只要
select * from table where rumber <= 100 and ID>LastID
这样就可以满足我的需求了
这样的话 ,我实在没有看出嵌套select 有什么作用
那么如果你直接翻到第四页呢,还没来得及记录上第三页的lastid,怎么办?
用子查询确实会降低性能,用不到索引
如果那些记录不是经常变化,或者改动不用改变原有的排列顺序。可以考虑加个rn字段,赋予你要的rownum值,建索引,这样的话就可以用。只是好像不太可能..
select * from table where rumber <= 100 and rn>100*(页码-1)
小于不需要rownum做order by了。
呵呵,不过大于也不要。不好解决的是有order by的分页。比如select * from table_a order by field1 这样的方式好像必须嵌套一下才行哟,这里有没有好的处理方法呀。
rownum 和 row_number()over(order by..) 的不同之一在于 :rownum 是先按照where查询,并添加伪列rownum ,然后order by
而 row_number()over(order by..) 则会在排序之后才插入rownum
这个结论我做实验已经证实而不使用runnum 时,嵌套的必要就出现了
select table_a.*,row_number()over(order by ID)rn from table_a where rn <=10;
这个语句是错误的,因为 在where 时候 “rn”没有产生