SQL执行顺序及where、group by及having
一、SQL的书写与执行顺序
SQL语句书写顺序select、form、where、group by、having、select、order by、limit
SQL语句执行顺序 from、where、group by、having、select、order by、limit
当然如果有join,肯定优先级是join,接下来是from之后的数据。
二、 WHERE、GROUP BY 和 HAVING 子句的正确顺序
1、举例说明:存在以下表格,我们用来做演示:其中(project_id,employee_id)是主键

理解应用 WHERE、GROUP BY 和 HAVING 子句的正确顺序对编写高效的查询代码会有所帮助:
2、若要取员工最多的项目,则结果是【1、2、5】:分析步骤,只要对项目分组,并取得每个分组中员工数,然后取这个最大员工数的项目编号。
select project_id
from Project
group by project_id
having count(employee_id)>= ALL (
select count(employee_id)
from Project
group by project_id
)
执行结果是:
{"headers": ["project_id"], "values": [[1], [5], [2]]}
3、若要取特定项目中【2、4、5】员工最多的项目,则结果【2、5】:分析步骤,则需要先使用where取特定项目,然后对特定项目分组,并取得每个分组中员工数,然后取这个最大员工数的项目编号。
select project_id
from Project
where project_id in(2,4,5)
group by project_id
having count(employee_id)>= ALL (
select count(employee_id)
from Project
group by project_id
)
执行结果是:
4、总结如下:
A、WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。 ☆☆☆☆☆
A、WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。 ☆☆☆☆☆
不可使用聚合函数。如果存在多条件,可以使用and、or等组合。
B、GROUP BY 子句用来分组 WHERE 子句的输出。 ☆☆☆☆
B、GROUP BY 子句用来分组 WHERE 子句的输出。 ☆☆☆☆
对where输出的语句执行分组,按照分组条件,若是多个条件,使用","分隔。
C、HAVING 子句用来从分组的结果中筛选行(针对对象:分组数据) 。☆☆☆☆
C、HAVING 子句用来从分组的结果中筛选行(针对对象:分组数据) 。☆☆☆☆
having可以使用聚合函数。
☆☆☆☆☆对于可以在分组操作之前或之后应用的任何搜索条件,在 WHERE 子句中指定它们会更有效。这样可以减少必须分组的行数。
☆☆☆☆☆应当在 HAVING 子句中指定的搜索条件只是那些必须在执行分组操作之后应用的搜索条件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2023-10-30 使用Lombok@Builder、@Data(没有生成无参构造方法)这个坑要注意,使用@Builder时配合@NoArgsConstructor和@AllArgsConstructor一起使用
2023-10-30 java.net.SocketException四大异常解决方案
2023-10-30 使用maven引入依赖包 快捷键 alt+insert 点击 dependency
2023-10-30 前端断点及使用
2019-10-30 EF原理和五种状态管理
2019-10-30 new Date() 在IE8兼容性