對數據庫基本操作是每個程序員基本功,如何理解並快速記住sql執行的順序呢,其實一條復雜的sql就能搞定:
SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition> ORDER BY <order_by_condition> LIMIT <limit_number>
執行順序:
(7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_type> JOIN <right_table> (2) ON <join_condition> (4) WHERE <where_condition> (5) GROUP BY <group_by_list> (6) HAVING <having_condition> (9) ORDER BY <order_by_condition> (10) LIMIT <limit_number>
另外需要注意的問題:
(1)group by 存在時,select中除了聚集函數外,所有的基本列必須是group by里面存在的;having基本上同group by一起使用的,having類似於where語句,只是having過濾是基於group by 分組后的數據,having一般通過select語句里面的聚集函數進行過濾。
參考:
http://www.cnblogs.com/Qian123/p/5666569.html
http://www.cnblogs.com/Qian123/p/5669259.html#_label10