今天去面试DBA...面试官对我说:"假如一个表data大于100行,要你显示第九行的数据,而且在第九行那里插入一个记录,怎么可以做到!"不要试图 select * from data where id =9 这样做,因为id=9或者其他之类等于9的,不一定是第九行,大家说该怎样做呢?

解决方案 »

  1.   


    select * from
    (select rownum as rn,a.* from a)
    where rn=9
      

  2.   

    关系数据库的原理就是数据行与行之间的是无序的,这里说的第9行可能是:1)按id排序的第9行2)根据rownum = 9来判断select *
      from ( 
            select t.*, rownum rn
              from t
           )
     where rn = 9;
    >且在第九行那里插入一个记录
    这个要求本身就是不合理,既然数据在物理存储上是无序,又何以在第9行插入一个记录呢?(除非是IOT表)
      

  3.   

    换种写法:
    select a.* from (
    select rownum,a.* from infor_dept a where rownum<=9   order by rownum desc) a
    where rownum <=1