SQL 描述(1)

4 篇文章 0 订阅
4 篇文章 1 订阅

这个标题源于大学的一个老师,他说SQL语句可以描述很多东西,而这种能力就叫做SQL描述。我真的信了,我百度了,google了,关于我想的那种解释半点都没。

我记错了?不过这说法还是很不错的,近来做项目,越来越感觉到SQL的强大。我用的是ORACLE,其他数据库接触的不多。先说几个有趣的例子。


1    有限自然数序列

select LEVEL N from dual CONNECT BY LEVEL <=122

level 据说是个伪列,connect by 类似与 for 循环中的 循环变量 


2  无限自然数序列

select LEVEL N from dual CONNECT BY 1=1

判断永远成立,就是无限循环


3   斐波那契数列

with G as (select LEVEL N from dual CONNECT BY LEVEL <=122),
     M as (select n,case when n=1 then 0 when n=2 then 1 else null end as v from g)
     select n,v from m 
     model  dimension by (n)
     measures (v)
     (
        v[n>2]=v[cv(n)-1]+v[cv(n)-2]
     )

with 将后面的查询结果集表示为一个表,可以用 逗号 隔开 支持多个结果集表,但最后的针对表的查询后面不用逗号。最后的查询要将前面定义的所有表都使用了,不然报错。
model 子句可以用来进行行间计算,dimension by 定义一个维度,可以理解为数组的下标,measures 定义一个度量,可以理解为数组某个下标对应的值,即数组的值。

cv()可以将dimension by 定义维度转换为类似于 for 循环中的 i。measures中的公式 左边可以直接使用纬度进行判断 公式右边需要使用cv,才可以像操作for循环中的元素 一样

操作度量中的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值