SQL描述(1)
SQL描述(1)
这个标题源于大学的一个老师,他说SQL语句可以描述很多东西,而这种能力就叫做SQL描述。我真的信了,我百度了,google了,关于我想的那种解释半点都没。
我记错了?不过这说法还是很不错的,近来做项目,越来越感觉到SQL的强大。我用的是ORACLE,其他数据库接触的不多。先说几个有趣的例子。
1 有限自然数序列 [sql] select LEVEL N from dual CONNECT BY LEVEL <=122 level 据说是个伪列,connect by 类似与 for 循环中的 循环变量 2 无限自然数序列 [sql] select LEVEL N from dual CONNECT BY 1=1
判断永远成立,就是无限循环
3 斐波那契数列
[sql] 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循环中的元素 一样
操作度量中的值