這個標題源於大學的一個老師,他說SQL語句可以描述很多東西,而這種能力就叫做SQL描述。我真的信了,我百度了,google了,關於我想的那種解釋半點都沒。
我記錯了?不過這說法還是很不錯的,近來做項目,越來越感覺到SQL的強大。我用的是ORACLE,其他數據庫接觸的不多。先說幾個有趣的例子。
1 有限自然數序列
select LEVEL N from dual CONNECT BY LEVEL <=122
level 據說是個僞列,connect by 類似與 for 循環中的 循環變量
select LEVEL N from dual CONNECT BY 1=1
判斷永遠成立,就是無限循環
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循環中的元素 一樣
操作度量中的值