MySQL执行顺序

MySQL执行顺序

MySQL语句的执行顺序也是在面试过程中经常问到的问题,并且熟悉执行顺序也有助于SQL语句的编写。

SELECT
FROM 
JOIN
ON
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT

执行顺序如下:

FROM
ON 
JOIN
WHERE
GROUP BY # (开始使用别名)
SUM # SUM等SQL中的函数
HAVING
SELECT
[DISTINCT] # 去重
ORDER BY
LIMIT

在这里插入图片描述

执行顺序解释

  1. FROM:首先要判断从哪个表里面进行查找,这时候可以判断出别名,以方便后面的语句使用
  2. ON:其实JOIN ON可以看做一个整体,代表要链接的表(JOIN)以及表条件(ON),但是在连接表之前,需要先知道连接条件,所以ON在前面
  3. JOIN:如2所示,JOIN要放在ON后面
  4. WHERE:通过JOIN ON会生成一个中间表,这时候执行WHERE筛选出符合条件的记录,(数据减少后当然操作更快),因此WHERE过滤要尽量放在前面(但是也不能在没有中间表的时候就执行,所以必须是在JOIN...ON...后面)
  5. GROUP BY是分组,通常分组都需要使用聚合函数才能执行
  6. 聚合函数:聚合函数可以看做与HAVING是一个整体,HAVING中放的是聚合函数的过滤条件(也可以放普通的条件,但是考虑到执行顺序以及执行效率,尽量将聚合函数的条件放在这里),由于HAVING中放着聚合的条件,所以要先执行聚合函数,得到结果,才能进行条件过滤,因此聚合函数在HAVING之前
  7. SELECT:在这些都执行结束之后,基本就能得到一个包含所有表所有符合条件的记录,这时候再用SELECT得到要查询的字段,进行输出
  8. 这时候可以使用DISTINCT进行过滤
  9. ORDER BY最后执行排序与分页,逻辑上来说是先排序后分页(比如我要用工资进行排序的话,我要的是所有工资从低到高,每10条数据显示,而不是10条显示,然后在对这10条进行排序)
  10. 分页,如9所示

举些例子

  1. 单表查询
SELECT manager_id,count(*) FROM employees WHERE employee_id>3 GROUP BY manager_id;

从employees表里面选择ID>3的各个manager_id的人数

执行顺序

FROM employees WHERE employee_id>3 GROUP BY manager_id COUNT(*) ;
  1. 双表查询
SELECT e.employee_id,e.last_name,d.location_id  FROM employees e JOIN departments d ON e.department_id=d.department_id ORDER BY e.employee_id;

执行顺序

FROM employees e,departments d # 从哪儿表格里面查(双表
ON e.department_id=d.department_id  # 连接条件用上,过滤出符合条件的
JOIN departments d # 关联双表
SELECT e.employee_id,e.last_name,d.location_id # 查询字段
ORDER BY e.employee_id; # 排序方式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值