2023-03-21 22:31

关于oracle数据库中 rownum between and 查不着数据

徐福沛

数据库

(395)

(0)

收藏

关于 oracle 中 rownum  between   and  查不着数据



首先查询所有的

select emp.*,rownum from emp;

1.png




可以查到数据,然后查rownum 1到5的数据

select emp.*,rownum from emp where rownum between 1 and 5;


也能查出数据

2.png

但是如果查询2到5的数据就查不到了

select emp.*,rownum from emp where rownum between 2 and 5;

3.png


当前这条sql语句执行并没有报错,但是就是查不出数据


原因: rownum是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序,它取得第一条记录则rownum值为1,第二条为2,依次类推。假设你用>、>=、=、between...and...这些条件。由于从缓冲区或数据文件里得到的第一条记录的rownum为1,不满足条件就会接着取下条,它的rownum还是1。又被删除,依次类推,便没有了数据。


简单的说就是:因为第一条的rownum不满足条件删掉了,第二条的ROWNUM又成了1,所以永远没有满足条件的记录。



解决方法:子查询先查出来,然后给rownum起个别名

with temp as
(select emp.*,rownum no from emp)
select * from temp where no between 2 and 5;

4.png


ps:rownum不能以任何基表的名称作为前缀


0条评论

点击登录参与评论