(1) from 子句 -首先执行
from employees e
- mysql 会先读取 from 子句中的表信息
(2) on 条件 -连接条件过滤
join departments d on e.dept_id = d.id
- 对连接表的行进行匹配
- 只有满足 on 条件的行才会被保留
(3) join 操作 -执行表连接
- mysql 支持多种连接方式:inner join、left/right join、cross join
(4) where 条件 -行级过滤
where e.salary > 5000 and d.location = 'ny'
- 此时不能使用 select 中的别名
- 不能使用聚合函数(如 count, sum 等)
(5) group by -分组操作
group by d.name, e.position
- 可以 group by 不在 select 中的列
- 分组后每组生成一行结果
(6) with cube/rollup -生成超组
group by d.name with rollup
- 生成小计和总计行
(7) having -分组后过滤
having avg(e.salary) > 6000
- 可以使用聚合函数
- 可以使用 select 中的别名
(8) select -选择输出列
select d.name, avg(e.salary) as avg_sal
- 计算表达式和函数调用
- 定义列别名
(9) distinct -去重操作
select distinct department
- mysql 可能在 group by 时就已经去重
(10) order by -结果排序
order by avg_sal desc
- 可以使用 select 中定义的别名
- 对最终结果集排序,性能消耗较大
(11) limit -结果限制
limit 10 offset 5
- mysql 特有语法,其他数据库可能用不同方式
- 限制返回的行数
到此这篇关于mysql 查询语句执行顺序的实现的文章就介绍到这了,更多相关mysql 查询语句执行顺序内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论