下面這張圖是我本身畫的sql邏輯圖。規定了一些畫法。而後畫出來是這樣的。sql
由於常常要讀別人的sql,又臭又長,可讀性不好,因而想作一個程序自動生成的邏輯圖。3d
爲何不用執行語法樹,由於我的以爲語法樹可讀性也不是很高。blog
打個比方說,a join b join c ,你explain一下,就會獲得執行計劃是 1.a join b 2. 上一個結果 join b。select
這樣對錶之間關係的理解不是頗有幫助。 由於 a b c 是同一層的表。可是按照執行計劃就會有前後順序。語法
如下是對上圖的解釋:程序
1.每個框框是一個查詢,即必定有一個select語句。im
2.箭頭指向另外一框框的底部,表示是另外一個框框的子查詢查詢
3.箭頭指向左邊,表明是join操做db
4.join的條件寫在箭頭裏。img
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表的子查詢。
下面是一些規則具體說明