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