一、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 子句中指定的搜索条件只是那些必须在执行分组操作之后应用的搜索条件。