下面這張圖是我自己畫的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表的子查詢。
下面是一些規則具體說明