1. 程式人生 > 其它 >Mysql-Sql執行順序

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: 截取出目標頁資料