在MySQL中执行子句的预定义顺序是什么?其中一些是在运行时决定的,这个顺序正确吗?

  • FROM clause
  • WHERE clause
  • GROUP BY clause
  • HAVING clause
  • SELECT clause
  • ORDER BY clause

推荐答案

MySQL语句的实际执行有点棘手.然而,该标准确实规定了查询中元素的解释顺序.这基本上是按照您指定的顺序进行的,尽管我认为HAVINGGROUP BY可能在SELECT之后:

  • FROM条款
  • WHERE条款
  • SELECT条款
  • GROUP BY条款
  • HAVING条款
  • ORDER BY条款

这对于理解如何解析查询很重要.例如,不能使用WHERE子句中SELECT中定义的列别名,因为WHERE是在SELECT之前解析的.另一方面,这样的别名可以出现在ORDER BY子句中.

至于实际执行,这实际上是由优化器决定的.例如:

. . .
GROUP BY a, b, c
ORDER BY NULL

. . .
GROUP BY a, b, c
ORDER BY a, b, c

both have the effect of the ORDER BY not being executed at all -- 和 so not executed after the GROUP BY (in the first case, the effect is to remove sorting from the GROUP BY 和 in the second the effect is to do nothing more than the GROUP BY already does).

Mysql相关问答推荐

是否有一种方法可以 Select 表中具有特定列值的行,该行还显示phpmyadmin中原始表中的行号?

如何重新采样SQL数据库

MySQL多连接以获得单个结果集(使用MySQL max函数)

Mysql - Select 匹配某些条件的两条记录之间经过的最大天数

获取连续11天未考勤的员工

多列分组并进行求和

Select 同一张表中的结果数?

global max_connections 和 spring.hikari.maximumPoolSize 有什么区别?

使用索引进行查询优化

关联同一个表中的两列

如何使用sql查询在日期列中按值和最大值分组的表中添加列?

使用 Having 表达式连接多个表

如何根据 R 中的价格范围将数据从一列复制到新列?

从多到多表中 Select 数据而无需重复

mysql从另一个表中 Select 不相等的值

SQL 中的双杠 (||) 是什么意思?

有什么方法可以显示`gunzip < database.sql.gz | 的进度? mysql ...`进程?

用户 'User'@'%' 和 'User'@'localhost' 不一样吗?

将 JavaScript 到日期对象转换为 MySQL 日期格式 (YYYY-MM-DD)

Python 是否支持 MySQL 准备好的语句?