select   *   from ( select rownum as a , emp.*  from emp where rownum < 11)  b   where b.a > 5 这个效率如何啊,oracle的查询优化器是如何处理这个sql语句啊,是不是先读内查询,在读外查询,相当一个2重循环啊?rownum 的是给整个表所有的行编号,还是针对通过过滤条件查询出来某些行,再给这些行编号?比如这个例子,如果我还要有个条件,要求这一个特定的部门的第5到第11个雇员,那要怎么写sql语句啊?

解决方案 »

  1.   

    先内,后外
    你这个是先取11条纪录,然后再过滤掉前5条
    特定部门 
    那你用 部门编号=条件啊
    如果是要每个部门的5-11
    就把里面的rownum 换成 row_number() over (partition by 部门 order by 员工编号)外面写a>=5 and a<=11
      

  2.   

    我不太明白,你给我写一个例子好吗,我只查一个部门的。
    我有个问题,rownum是对什么而言,如果是对整个表的编号,那我如何获得麽个部门,再获得这个部门中按编号顺序的第5~11个?
      

  3.   

    rownum是对整个纪录集编号row_number() over(partition by 分组条件 order by 排序条件)
    可以按部门分组后,按排序条件,对同一组的纪录进行编号
      

  4.   

    用minus也可以
    select emp.*  from emp where rownum < 11
    minus
    select emp.*  from emp where rownum <=5
      

  5.   

    楼主的SQL写的是对的,rownum 是针对结果集编号