SQL求1-100的质数
场景:
今天无意中看到这样一个求1-100的质数SQL,如下:
with t as
(select rownum rn from dual connect by level <= 100)
select *
from t
where rn > 1
minus
select ta.rn * tb.rn
from t ta, t tb
where ta.rn <= tb.rn and ta.rn > 1 and tb.rn > 1;
分析:
1.首先得明白什么是质数,简单的说质数就是:比1大的整数除了1和它本身外,不再有其他因数;
2.分析上面的SQL
with t as
(select rownum rn from dual connect by level <= 100) --使用with获取存放1-100整数的视图t
select *
from t
where rn > 1 --2-100的整数
minus --差集
select ta.rn * tb.rn --乘积,此时的数表示因数大于2个的数
from t ta, t tb
where ta.rn <= tb.rn and ta.rn > 1 and tb.rn > 1;
2-100的数减去因数大于2个的数就剩下只有1和它本身的数即为质数;
但这里最后的内关联实际会发生笛卡尔积!