Oracle之如何从表中随机取出一些数据

352 阅读2分钟

「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战

今日份知识学习

今天我们来解决一个问题,那就是如何从表中随机取出指定行数的结果集,且每次执行获得的结果集数据不能一样。

具体讲解

这里还是涉及到了一个函数,那就是dbms_random。

dbms_random函数

dbms_random是oracle中提供的一个PL/SQL包,是用于生成随机数据的函数。

先进行随机排序

通过dbms_random来进行随机排序,让我们来看一下示例:

select * from user_table order by dbms_random.value();

通过此SQL可以针对user_table表中的数据进行随机排序。

接着我们通过rownum来取出随机的几行数据

直接上示例吧。

select * from (select * from user_table order by dbms_random.value()) where rownum <= 5

根据此SQL,我们就可以随机取出五条数据了,而且能保证每一次的数据各不相同。

分享一个错误方案

还需要分享一个错误的方案,来看下面的示例:

select * from user_table where rownum <= 5 order by dbms_random.value()

对比之下,其实这个SQL没有太大的变动,只不过将rownum <=5 放到了一行内了。

这会造成什么样的结果呢?

答案是这样的SQL无法真正做到随机取出数据,只能拿出固定的一些数据,只不过是做到了随机排序而已。

原因是在oracle中,rownum的执行顺序在order by前面,所以整个SQL的执行就会先取出五条数据,随后进行随机排序。

无论执行多少次,都只会随机出现同样五条数据。

记住整个错误方案,在使用时要考虑在内。

总结

今天学习的这个问题,很现实,同样也很常见,要考虑更多的情况才能实现出来。

最近开始来学习Oracle数据库的一些知识,其中包含一些函数的使用,或者是特性的介绍讲解等,将会在系列文章内说到。

喜欢的可以关注一下专栏。