`
namezhou
  • 浏览: 155148 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle 实现分页 SQL

    博客分类:
  • DBMS
阅读更多

 

select * from a_matrix_navigation_map
where rowid not in(select rowid from a_matrix_navigation_map where rownum<=0) and rownum<=10

第二种:

SELECT * FROM
(
SELECT A.*, rownum r
FROM
(
SELECT *
FROM a_matrix_navigation_map

) A
WHERE rownum <= 10
) B
WHERE r > 0

第三种

SELECT * FROM table WHERE ROWNUM<101; 
minus 
SELECT * FROM table WHERE ROWNUM<91; 
第四种

可以用变通一点的办法,我给个示例: 

sql = "select a_id,a_title,a_author,aID,a_time,a_readtime,sID from article order by a_id"; 

int a; 
while (rs.next()) { 
a++; 
if (a=ipage+spage)continue; 
... 
}
 

其中第二种是非常成熟的分页
我的实例~ 即可实现 类似limit 功能
 
$bandanspager="select * from abc t2,abc1 t1 where t1.id=t2.id group by t1.id";
 
   $sql=" SELECT * FROM
         (
            SELECT A.*, rownum r
            FROM
            ( ".$bandanspager.") A
           WHERE rownum <= 10
         ) B

         WHERE r > 0

 

 

Oracle不支持类似于 MySQL 中的 limit. 但你还是可以rownum来限制返回的结果集的行数.

如果你只希望返回前十行纪录,你可以这样写: 

SELECT * FROM table WHERE ROWNUM<10; 

但是下面的语句是不对的:

SELECT * FROM table WHERE ROWNUM>90 AND ROWNUM<100; 

这是因为 Oracle 认为这个条件不成立,所以没有返回。
你应该这样写: 

SELECT * FROM table WHERE ROWNUM<101; 
minus 
SELECT * FROM table WHERE ROWNUM<91;

 

其他数据库模拟实现mysql的limit语法

假如我有个user表,我想查询符合某些条件的第50个用户开始的10个用户,且不能使用id号between and那样查询,应该怎么写SQL语句?

  在mysql数据库中有limit,offset语句可以方便的实现,那么在SQL server中呢?SQL Server是否支持limit和offset语句呢?

select top 10 * from
(select top 60 * from [user] order by userid) aa
order by userid desc

  oracle,如果想从表中取出按照某字段排序前M到N条记录

  下面的ORACLE语句是最好的:

SQL> select ID from
     (
       select ID , rownum as con from
       (
        select ID from TestSort order by ID
       )
       where rownum <= 3   /*N值*/
     )
     where con >= 2; /*M 值*/
ID
----------
         2
         3

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics