MySQL小結

select語句中的列(非聚合函數列),必須出現在group by子句中。

group by子句中的列,不一定要出現在select語句中。

聚合函數只能出現select語句中或者having語句中,一定不能出現在where語句中。

where語句中的條件只能是數據庫中已經存在的字段。

 SQL語句的執行順序:

示例SQL:

SELECT * FROM user LEFT JOIN order ON user.id = order.uid

WHERE order.price > 5000

GROUP BY user.name

HAVING count(1) > 8

ORDER BY user.name

LIMIT 0,10

 

 執行順序:

  1. FROM(將最近的兩張表,進行笛卡爾積)---VT1(VT--->virtual table   虛表)
  2. ON(將VT1按照它的條件進行過濾)---VT2
  3. LEFT JOIN(保留左表的記錄)---VT3
  4. WHERE(過濾VT3中的記錄)--VT4…VTn   (根據where的條件個數來看 一個條件產生一個虛表)
  5. GROUP BY(對VT4的記錄進行分組)---VT5
  6. HAVING(對VT5中的記錄進行過濾)---VT6
  7. SELECT(對VT6中的記錄,選取指定的列)--VT7
  8. ORDER BY(對VT7的記錄進行排序)--遊標
  9. LIMIT(對排序之後的值進行分頁) 

 

WHERE條件執行順序(影響性能)

不同數據庫where條件的執行順序不同:

1.MySQL:從左到右的執行WHERE條件

2.Oracle:從右到左的執行 WHERE條件

3.postgreSQL:從左到右的執行WHERE條件

因此:

   寫WHERE條件的時候,優先級高的部分要去編寫過濾力度最大的條件語句

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章