单表查询语句顺序
单表查询包含分组(group by)
、过滤(having)
、排序(order by)
以及分页(limit)
,在较复杂的多表查询中,我们通常会用到以上多个甚至所有,在MySQL语句中,场景不同,顺序不同,查询结果也将不同甚至报错
。
查询格式
select column1,column2,column3... from table
group by -- 分组
having -- 过滤
order by -- 排序
limit -- 分页
例题代码示例
要求查询:平均工资
最高
的两个部门
的部门号和平均工资
。若平均工资低于1000则不显示
。
分析:
- 平均工资:使用AVG();
- 按部门查询:GROUP BY 字段;
- 平均工资需要超过1000:HAVING 平均工资>1000;【用到了第一步和第二部的结果】
- 平均工资最高:ORDER BY 字段 DESC;【平均工资排序,用到了第三步的结果】
- 两个部门:分页LIMIT 0,2; 【取平均工资最高且大于1000的两个哥部门,需要用到第四部排序后的结果】
代码演示
SELECT AVG(sal)AS avg_sal,deptno
FROM emp --查询emp表
GROUP BY deptno --按部门号分组
HAVING avg_sal>1000 --赛选平均工资大于1000
ORDER BY avg_sal DESC --降序排列
LIMIT 0,2; --0表示从第一行开始,2表示查询两行,即查询第一行和第二行
由此可见,单表查询的顺序都是严格按照逻辑要求的!!