sql生成可讀性邏輯圖

肥仔佳文豬發表於2021-05-28

下面這張圖是我自己畫的sql邏輯圖。規定了一些畫法。然後畫出來是這樣的。

因為經常要讀別人的sql,又臭又長,可讀性很差,於是想做一個程式自動生成的邏輯圖。

為什麼不用執行語法樹,因為個人覺得語法樹可讀性也不是很高。

打個比方說,a join b join c ,你explain一下,就會得到執行計劃是 1.a join b 2. 上一個結果 join b。

這樣對錶之間關係的理解不是很有幫助。 因為  a b c 是同一層的表。但是按照執行計劃就會有先後順序。

 

 

 以下是對上圖的解釋:

1.每一個框框是一個查詢,即一定有一個select語句。

2.箭頭指向另一框框的底部,表示是另一個框框的子查詢

3.箭頭指向左邊,代表是join操作

4.join的條件寫在箭頭裡。

5.每一個框框代表一個select,且是單張表的查詢,框框裡附帶上 select xxx+group by+where

舉例:select a.id,max(b.age) from a join b group by a.id

則先將sql轉化成

select a.id,max(b.age) from (select * from a) join (select * from b)on a.id=b.id where b.id>1 group by a.id

則結果表是  select aid,max(bage) from tmp where bid>1 group by a.id, 在tmp的框框裡寫上 select xxx+group by+where

而tmp表是(a join b )形成,所以 (a join b)是tmp表的子查詢。 

 

下面是一些規則具體說明

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相關文章