SQL的执行顺序
(1)from (表关联,是从后往前、从右到左解析的 ) 所以尽量把数据量大的表放在最左边来进行关联
(2) on 需要从哪个数据表检索数据
(3) join 多表连接时,使用表的别名并把别名前缀于每个Column上。可以减少解析的时间并减少那些由Column 歧义引起的语法错误.
(4) where 过滤表中数据的条件 (解析顺序是自下而上、从右到左 )所以把能筛选出大量数据的条件放在where语句的最下面
(5)group by(开始使用select中的别名,后面的语句中都可以使用) 如何将上面过滤出的数据分组 (执行顺序从左往右分组)
1、 如果应用了group by,那么后面的所有步骤都只能得到group by后的列或者是聚合函数(count、sum、avg等)。原因在于最终的结果集中只为每个组包含一行。这一点请牢记。
2、提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。即在GROUP BY前使用WHERE来过虑,而尽量避免GROUP BY后再HAVING过滤
(6) avg,sum.... 聚合函数
(7)having 对上面已经分组的数据进行过滤的条件(很耗资源,尽量少用)
避免使用HAVING 子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作.
(8) select 查看结果集中的哪个列,或列的计算结果 (少用*号,尽量取字段名称)
在解析的过程中, 会将依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 使用列名意味着将减少消耗时间。
sql 语句用大写的;因为 oracle 总是先解析 sql 语句,把小写的字母转换成大写的再执行
(9) distinct
(10) order by 按照什么样的顺序来查看返回的数据 (执行顺序为从左到右排序,很耗资源)