Mysql-Sql執行順序


1. 書寫順序

  select->distinct->from->join->on->where->group by->having->order by->limit

2. 執行順序 

  from->on->join->where->group by->sum、count、max、avg->having->select->distinct->order by->limit

3. 詳細說明  

  from: 需要從哪個數據表檢索數據;


  join: 對需要關聯查詢的表進行關聯;
    關聯查詢時,數據庫會選擇一個驅動表,然后用此表的記錄去關聯其他表;
    left join一般以左表為驅動表(right join一般為右表),inner join一般以結果集少的表為驅動表;
    left join某些情況下會被查詢優化器優化為inner join.


  on: 關聯條件


  where: 過濾表中數據的條件;
    執行順序: 自下而上、從右到左.
    注:   對數據庫記錄生效,
      無法對聚合結果生效,
      可以過濾掉最大數量記錄的條件必須寫在where子句末尾,
      不能使用聚合函數(sum、count、max、avg).


  group by: 如何將上面過濾出的數據分組;
    執行順序: 從左往右.
    注: 盡量在group by之前使用where過濾,避免之后使用having過濾.


  avg: 求平均值;


  having: 對上面已經分組的數據進行過濾的條件;
    注: 對聚合結果過濾,因此很耗資源,可以使用聚合函數.
    例: 篩選統計人口數量大於100W的地區.
​       select region,sum(population),sum(area) from bbc group by region having sum(population)>1000000
    不能用where篩選超過100W的地區,因為不存在這樣的一條記錄.


  select: 查看結果集中的哪個列或列的計算結果;


  distinct: 對結果集重復值去重;


  order by: 按照什么樣的順序來查看返回的數據;
    執行順序: 從左到右.
    注: 很耗資源.


  limit: 截取出目標頁數據.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM