SQL 描述(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循環中的元素 一樣

操作度量中的值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章