[点晴永久免费OA]SQL语句执行顺序相关问题
当前位置:点晴教程→点晴OA办公管理信息系统
→『 经验分享&问题答疑 』
注意本文是SQL执行顺序,不是MySQL Server内部执行流程。 书写顺序select...from...join...on...where...group by...having...order by...limit... 执行顺序from->join->on->where->group by->having->select->order by->limit SQL书写顺序与执行顺序不一致的原因?SQL语言设计受到了数学中的关系代数和元组演算的影响。这些数学理论中并没有考虑操作顺序,历史原因造成SQL书写上的差异。 SQL执行顺序的逻辑是什么?
为什么SQL执行不是先group by再where?先分组再筛选,逻辑上说的过去,相当于整理好数据再筛选,类似于创建索引和使用索引的过程,这也是问题的由来。 为什么SQL执行要先select再order by?尝试select field2 from table order by field1,select后面没跟order by后面的field1也不报错。 为什么MySQL的where比having效率更高?mysql执行时,先执行from用于定位操作对象,然后就是where,可能百万条的数据经过where之后只剩下几十条,然后在进行之后的操作。而group by比where多了一个环节。 聚合函数参与筛选条件,为什么只能用having?//报错,Invalid use of group function select field from table where avg(field) > 2 //需要修改为select field from table group by field having avg(field) > 2 聚合函数(常见的avg、sum、count、min、max)需要在分组之后才能计算,执行到where时还没有分组,此时对分组进行数据处理,所以报错。相当于要喝一口还没生产的可乐,不符合事物的发展规律。 为什么使用聚合函数有分组的前提?所谓聚合函数,就是对一组数据进行汇总计算,所以有分组的前提。即便没有使用group by显式声明,SQL也会对上游过来的数据集进行默认分组(隐式分组)。 为什么字段别名不能在where中使用?where执行在select之前,此时别名未生效。 为什么group by和having执行顺序优先于select,却可以使用字段别名?可以肯定进行了预加载,不然一定找不到别名,会报错的。 该文章在 2024/2/24 16:52:47 编辑过 |
关键字查询
相关文章
正在查询... |