假设有一个表只有书名和作者,一共有10行,那求第五到第十行的书名和作者,除了用minus外,即(
select rownum ,title,author from where rownum<11
minus
select rownum,title,author from where rownum>5;
)
请问用sql语句子查询怎么写?

解决方案 »

  1.   

    select * 
    from
    (select a.*,row_number() over(order by title) rn
    from tb a
    )
    where rn between 5 and 10
    ;
      

  2.   

    你这样写的记录并不是6-10,而是1-10,即rownum>5按你这种是选不出记录的,因伪列rownum从1开始
    ,第1条不大于5则排除,查第二条,因此... where rownum>5;是没数据的
      

  3.   


    方法一:
    select * 
    from
    (select a.*,row_number() over( order by title) rn
    from tb a
    )
    where rn between 5 and 10
    方法二:
    select * from (select a.*,rownum as numbers from tb a where a.rownum<=10) b where b.rownum>=6;
      

  4.   

    另外注意rownum伪劣是在数据提取出来后再加上的序号,因此在where中是不能直接 rownum>的
      

  5.   

    因为rownum不能between 5 and 10,所以需要用rownum取别名rn伪列构造子查询,再用rn between 5 and 10
      

  6.   

    楼主的这个问题是Oracle的分页问题,关于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控制分页查询的每页的范围。