Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL SQL执行顺序

MySQL中SQL执行顺序及最容易踩的3个坑

作者:踏着七彩祥云的小丑

SQL执行顺序是MySQL核心原理之一,深入理解它有助于我们编写出更高效、更可靠的查询语句,下面这篇文章主要介绍了MySQL中SQL执行顺序及最容易踩的3个坑,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、标准执行顺序

 FROM / JOIN / ON → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT

1. FROM / JOIN / ON

第一步:先找表!

没有这一步,后面所有条件都无从谈起。

2. WHERE

第二步:过滤行!

WHERE 越早过滤,后面计算越快。

3. GROUP BY

第三步:分组!

4. HAVING

第四步:过滤分组!

WHERE 过滤行
HAVING 过滤组

5. SELECT

第五步:查要显示的列!

⚠️ 重点:WHERE 中不能用 SELECT 里的别名
因为 WHERE 比 SELECT 先执行!

6. DISTINCT

第六步:去重!

7. ORDER BY

第七步:排序!

8. LIMIT

第八步:截取前几条!

二、 SQL 完整演示执行顺序

你写的 SQL:

SELECT 
  class_name, COUNT(*) AS num
FROM student
WHERE age > 18
GROUP BY class_name
HAVING num > 10
ORDER BY num DESC
LIMIT 5;

真正执行顺序:

  1. FROM student 找到表
  2. WHERE age>18 过滤年龄
  3. GROUP BY class_name 按班级分组
  4. HAVING num>10 只保留人数>10的班级
  5. SELECT 计算班级名和数量
  6. ORDER BY 排序
  7. LIMIT 取前5

三、最容易踩的 3 个坑(必须记住)

坑1:WHERE 里不能用 SELECT 的别名

-- 错误
SELECT name AS n FROM student WHERE n='张三'

原因:WHERE 比 SELECT 先执行,根本不知道 n 是什么。

坑2:WHERE 不能用聚合函数

-- 错误
SELECT COUNT(*) FROM student WHERE COUNT(*)>10

正确写法:

SELECT COUNT(*) FROM student GROUP BY class HAVING COUNT(*)>10

坑3:HAVING 必须跟 GROUP BY

没有分组,就不能用 HAVING。

总结(最核心 3 条)

  1. FROM 最先执行
  2. WHERE 在 GROUP BY 前面
  3. SELECT 在 HAVING 之后、ORDER BY 之前

总结 

到此这篇关于MySQL中SQL执行顺序及最容易踩的3个坑的文章就介绍到这了,更多相关MySQL SQL执行顺序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文