mysql之表的记录的查询的执行顺序

目录

1.概述

2.步骤

 (1)FROM(数据源确定)

 (2)WHERE(筛选)

(3)GROUP BY(分组)

(4)HAVING(过滤分组结果)

(5)SELECT(选择列)

(6)ORDER BY(排序)

(7)LIMIT(限制结果数量)


1.概述

查询执行顺序是从数据源头开始,逐步筛选、分组、计算和排序,最后限制返回结果的数量。总体顺序为:

FROM(确定数据源,虽未在给定关键字中,但属于基础步骤)→WHERE(筛选原始数据)→GROUP BY(分组)→HAVING(过滤分组结果)→SELECT(选择列)→ORDER BY(排序)→LIMIT(限制结果数量)。

2.步骤

 (1)FROM(数据源确定)

这是查询的起始步骤,虽然没有在你要求的这些部分之中,但它是基础。例如,在SELECT * FROM employees中,FROM employees确定了数据是从employees表中获取。这一步骤为后续操作提供了原始数据集合。

 (2)WHERE(筛选)

基于FROM确定的原始数据,WHERE子句对其进行筛选。它会根据设定的条件,过滤掉不符合要求的数据。例如,SELECT * FROM employees WHERE salary > 5000,会检查employees表中的每一条记录,只有当salary列的值大于 5000 时,这条记录才会被保留,进入下一个处理阶段。

(3)GROUP BY(分组)

经过WHERE筛选后的剩余数据会进行分组操作。GROUP BY子句按照指定的列将数据划分为不同的组。比如,SELECT department, COUNT(*) FROM employees WHERE salary > 5000 GROUP BY department,在前面筛选出工资大于 5000 的员工记录后,会按照department列将这些记录分组,为后续对每个组进行聚合操作(如COUNT(*))做准备。

(4)HAVING(过滤分组结果)

分组完成后,HAVING子句用于对分组后的结果进行过滤。它通常基于聚合函数的结果来筛选分组。例如,SELECT department, COUNT(*) FROM employees WHERE salary > 5000 GROUP BY department HAVING COUNT(*) > 3,在按部门分组并计算每个部门工资大于 5000 的员工数量后,只有当部门内员工数量大于 3 时,这个部门分组才会被保留。

(5)SELECT(选择列)

在数据经过筛选、分组和再次过滤后,SELECT子句开始工作。它用于选择要在结果集中返回的列。这些列可以是原始表中的列,也可以是通过聚合函数等计算得到的列。例如,在前面的查询中,SELECT department, COUNT(*)选择了department列和每个部门的员工数量列(通过COUNT(*)计算得到)作为最终结果集要返回的列。

(6)ORDER BY(排序)

对SELECT选择的列构成的结果集进行排序操作。ORDER BY可以指定按照一个或多个列进行升序(ASC)或降序(DESC)排列。例如,SELECT department, COUNT(*) FROM employees WHERE salary > 5000 GROUP BY department HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC,在确定了要返回的部门和员工数量列后,按照员工数量列进行降序排列结果集。

(7)LIMIT(限制结果数量)

最后,LIMIT子句用于限制最终返回结果集的行数。可以指定一个数字,表示返回固定数量的行;也可以指定两个数字,用于指定偏移量和要返回的行数。例如,SELECT department, COUNT(*) FROM employees WHERE salary > 5000 GROUP BY department HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC LIMIT 5,在排序后的结果集中,只返回前 5 行记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值