问题在于重命名在哪生效,最经典的是select
重命名列名之后,where
和group by
中不能写新名字,要写老名字做筛选,这是执行顺序决定的。只有order by
中可以用。
sql
语句:
select distinct
查询列表(要查的字段)
from
左边的表们s
连接类型(left|inner) join
右边的表们s
on
连接条件
where
筛选条件
group by
分组的列表(按什么字段分组)
having
having_condition
order by
排序的字段
limit
limit number;
执行顺序:
1 from 左边的表们s:从左边的表开始选择数据
2 连接类型(left|inner) join 右边的表们s on 连接条件:按照连接条件和右边的表进行连接,形成结果集
3 where 筛选条件:在形成的结果集中根据筛选条件过滤数据
4 group by 分组列表(按什么字段分组):在过滤后的数据集中根据分组字段进行分组
5 having having_condition:对分组后的数据集应用条件进行过滤
6 select:选择结果集中需要的列,计算结果
7 distinct 查询列表(要查询的字段):对结果集去除重复行
8 order by 排序的字段:对结果集进行排序
9 limit limit_number:对结果集进行限制行数
详细参考:SQL语句执行顺序【全】