摘要:
oracle中rownum伪字段用得比较频繁,特别是分页之中,但是由于它的一些特殊性很多人可能并不理解它的实际行为,网络上有很多文章介绍这个 rownum的用法,但是很多都讲得非常模糊,或者就是不太全面,大家看起来也非常痛苦,在这里我将给大家全面讲解一下,希望对大家有所帮助: 首先我们来认识几点rownum的特殊性: 第一、rownum是在记录输出的时候才一步一步的产生的。 第二、如果之前没有满足条件的记录输出,则后面的rownum始终都是从1开始的。 记住以上两点,基本上你也算是非常了解这个伪字段的用法了,下面我来具体分析一下这些特殊性。我们考察如下的 SQL语句:select *... 阅读全文
摘要:
中国的彩票选号,例如36选7,从36个数字中随机选取7个,这在算法上如何实现呢? 最简单的想法就是,每次都从1~36随机选取一个数,一共选7次,不就可以了吗? 但这样会有一个问题——重复。彩票选号是不能重复的,这也即是说如果你第一次选到的数是10,那么以后再从1~36中选数的时候,10就不能再选了。 有人可能会说了,这还不好办,如果重复了就废掉,重新再选一个呗。 这的确是一种解决方法,但是会有很大的问题,比如说5选4吧,前三个都已经选好了是2,3,4,现在取第4个数,这种情况下,取到1和5的几率要比取到2,3,4的几率还要小,也就是说,最坏的情况下,有可能会取很多次2,3,4,扔掉很多次,才最 阅读全文
摘要:
大型web运用中我们都知道会采用多数据库的方式来存储大量数据,这个过程中我们就会采用对数据的垂直划分或者水平划分来组织数据。当然web查询就会涉及到分页,如果采用的水平划分数据,那么查询分页的数据就可能分布在不同的数据库中,那么这个时候我们如何来分页呢? 其实原理很简单,比如,我要查询第11页的数据,这里每页数据是20条,那么第11页数据的记录位置就在201开始到210的位置结束。假设现在我们的记录水平分割在了3个数据库中(或者3张表中),此时,我们就需要这样来进行分页,首先从每个数据库(每张表)中分别都查出前210条数据,这样这里就有210*3=630条。然后对这630条数据进行排序,从中取 阅读全文