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







