执行顺序是什么?
Form
这一阶段读取表的数据,并准备执行后续的操作。如果有多表连接,这一步也会涉及连接操作(INNER JOIN、LEFT JOIN、RIGHT JOIN、CROSS JOIN 等)。
ON
在进行表连接时,使用 ON 关键字指定连接条件。
WHERE
这一阶段对读取的数据应用条件过滤,仅保留满足条件的记录。
GROUP BY
这一阶段对数据进行分组,通常与聚合函数(如 COUNT, SUM, AVG 等)一起使用。
HAVING
这一阶段用于过滤分组后的数据。HAVING 与 WHERE 的区别在于 HAVING 作用于分组后的数据,而 WHERE 作用于分组前的数据。
SELECT
这一阶段选择需要的列。可以包含列名、表达式或聚合函数。
DISTINCT
这一阶段用于去除结果集中重复的行。
ORDER BY
这一阶段对结果进行排序。可以按一个或多个列进行升序(ASC)或降序(DESC)排序。
LIMIT
这一阶段用于限制返回的行数。可以用于分页等场景。
为什么分组函数不能直接使用在where后面?
select ename,sal from emp where sal > min(sal);//报错。
因为分组函数在使用的时候必须先分组之后才能使用。
where执行的时候,还没有分组。所以where后面不能出现分组函数。
select sum(sal) from emp;
这个没有分组,为啥sum()函数可以用呢?
因为select在group by之后执行。