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: 截取出目标页数据.