是否有确定的地方可以找到mySQL语句的操作顺序?以下订单是否正确?
FROM子句 WHERE子句 GROUP BY子句 HAVING子句 SELECT子句 ORDER BY子句
如果是这种情况,我可以在group by子句中使用SELECT clase中定义的术语(选择first_name作为“f_name”)吗?
谢谢!
答案 0 :(得分:3)
我假设您对SELECT
感兴趣,根据MySQL documentation语法如下
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr ...]
[FROM table_references
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name' export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]]
是的,您可以在AS
子句中使用GROUP BY
定义的列。
答案 1 :(得分:0)
我认为Order By在Select之前出现(你可以对你没有选择的列进行排序),但是Group By和Having肯定会死掉。分组需要了解整个结果集,并且您只能对“选择”列表中的非聚合列进行分组(并且必须对所有这些列进行分组)。将结果集分组后,将Having作为一组条件应用于分组结果集。
所以,我认为大多数引擎,包括MySQL,处理如下: