Oracle WHERE条件执行顺序:ORACLE采用自下而上的顺序解析WHERE子句

1、据此那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾
例如:SELECT … FROM EMP E WHERE SAL > 50000 AND JOB = ‘MANAGER’ AND 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO);(低效)
     SELECT … FROM EMP E WHERE 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO) AND SAL > 50000 AND JOB = ‘MANAGER’;(高效)
2、SELECT子句中避免使用'*'
当在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用'*'是一个方便的方法.可是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间.
3、使用表的别名(Alias)
当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.

当一个查询语句同时出现了where、group by、having、order by的时候的执行和编写顺序
一般形式为
select 列a,聚合函数 from 表
where 过滤条件
group by 列a
group by子句与where结合使用时,where在前,group by 在后
当使用having子句对分组后的结果进行筛选,语法和where差不多
1、having只能用在group by之后,对分组后的结果进行筛选
2、where肯定在group by之前,即也在having之前
3、where条件里不允许使用聚合函数,having可以
当一个查询语句同时出现where、group by、having、order by的时候
1、执行where 对表筛选返回第1个结果集
2、对第1个结果集使用group by分组,返回第2个结果集
3、对第2个结果集中每组数据执行select,有几组就执行几次,返回第3个结果集
4、对第3个结果集执行having筛选,返回第4个结果集
5、对第4个结果集排序
example:
按由高到低的顺序显示平局分在70分以上的学生姓名和平均分,计算平均分前不包括60分以下的成绩,也不计算某某(xx)的成绩
分析:
1、显示学生姓名和平均分
select s_name,avg(score) from student
2、计算平均分前不包括60分以下的成绩,且不计算某某(xx)的成绩
where score>=60 and s_name!='xx'
3、显示个人平均分
group by s_name
4、显示平均分在70分以上
having avg(s_score)>=70
5、顺序由高到低
order by avg(s_score) desc

索引的使用
1、索引是单独的数据库对象,也需要被维护
2、索引可以提高查询速度,但会降低增删改的速度
3、通过一定的查询触发,并不是越多越好

转载:http://blog.csdn.net/cainiaowys/article/details/6652459
转载:http://wenku.baidu.com/view/d83707e981c758f5f61f67e0.html

最新文章

  1. virtualbox linux虚拟机相关
  2. Mac 问题
  3. 如何自学Android
  4. 文件上传小技巧/原生态【html篇】
  5. javascript-this,call,apply,bind简述1
  6. iOS开发--正则表达式
  7. ACM3787
  8. Python 日志模块logging
  9. 三、Java多人博客系统-技术架构
  10. PTA编程总结1—打印沙漏
  11. 2018.09.16 codeforces1041C. Coffee Break(双端队列)
  12. 如何移动 nuget 缓存文件夹
  13. 2018 焦作icpc现场赛总结
  14. kettle简单插入与更新
  15. 关于Java获取文件路径的几种方法
  16. gradle build scan 插件使用
  17. php中比较好用的函数
  18. pyPdf - 用Python方便的处理PDF文档
  19. 利用Java编写简单的WebService实例
  20. 精神AC合集 2018.4.3

热门文章

  1. CF351E Jeff and Permutation
  2. java 代理的概念与作用
  3. css3颜色+透明度渐变
  4. RabbitMQ-Exchange交换器
  5. 深浅Copy的理解
  6. 关于axios的一些封装
  7. 关于react的redux的知识点
  8. UI 素材相关收集
  9. Android studio 使用git仓库记录
  10. C++ 动态加载 DLL 时,GetProcAddress() 返回 NULL,GetLastError() 获取错误代码为 127