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

【转】oracle条件子句执行顺序的更多相关文章

  1. SQL子句执行顺序和Join的一点总结

    SQL子句执行顺序和Join的一点总结 FROM ON JOIN WHERE GROUP BY WITH CUBE or WITH ROLLUP HAVING SELECT DISTINCT ORDE ...

  2. [转载]T-SQL(Oracle)语句查询执行顺序

    原文链接:http://blog.sina.com.cn/s/blog_61c006ea0100mlgq.html sql语法的分析是从右到左,where子句中的条件书写顺序,基本上对sql性能没有影 ...

  3. Oracle sql语句执行顺序

    sql语法的分析是从右到左 一.sql语句的执行步骤: 1)词法分析,词法分析阶段是编译过程的第一个阶段.这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构 ...

  4. Oracle sql语句执行顺序(转)

    from: http://blog.csdn.net/lailai186/article/details/12612263 sql语法的分析是从右到左 一.sql语句的执行步骤:1)语法分析,分析语句 ...

  5. [转]Oracle Form 触发器执行顺序

    Trigger 不是数据库中的触发器,不过功能类似,都是当某个事件发生的时候会触发. Trigger中可以编写代码,当对应事件发生的时候就会执行该Trigger中的代码. Oracle Form中的T ...

  6. oracle form 触发器执行顺序及键定义[Z]

    1当打开FORM时: (1)PRE-FORM (2)PRE-BLOCK(BLOCK级) (3)WHEN-NEW-FORM-INSTANCE (4)WHEN-NEW-BLOCK-INSTANCE (5) ...

  7. Java判断语句中判断条件的执行顺序

    if判断里面如果是多个条件的判断,会按照从前往后的顺序执行.基本所有语言都是一致的设计,这样做能提高程序的效率. 比如: if ( conditionA && conditionB ) ...

  8. ORACLE FormBuilder触发器执行顺序

    1.当打开FORM时: (1)PRE-FORM (2)PRE-BLOCK(BLOCK级) (3)WHEN-NEW-FORM-INSTANCE (4)WHEN-NEW-BLOCK-INSTANCE (5 ...

  9. oracle查询语句执行顺序

    完整的查询语句类似是这样的: select ..., ROWNUM from table where <where clause> group by <columns> hav ...

随机推荐

  1. 利用SpEL 表达式实现简单的动态分表查询

    这里的动态分表查询并不是动态构造sql语句,而是利用SpEL操作同一结构的不同张表. 也可以参考Spring Data Jpa中的章节http://docs.spring.io/spring-data ...

  2. 【js】 vue 2.5.1 源码学习(五) props directives规范化 props 合并策略

    大体思路 (四) 上节回顾: A: 对于生命周期函数将父子组件的函数放到一个数组里面,特定时间点调用,保证父子组件函数都调用到. B: 对于directive,filters,components 等 ...

  3. vue项目安装scss,以及安装scss报错(this.getResolve is not a function)

    1.安装scss: npm install node-sass sass-loader vue-style-loader --save-dev //安装node-sass sass-loader vu ...

  4. C# 将 Begin 和 End 异步方法转 task 异步

    在 .NET Framework 有两个不同的异步方法,一个是 Asynchronous Programming Model (APM) 另一个是 Task-based asynchronous pa ...

  5. vue-cli3 使用 svg-sprite-loader 的坑

    chainWebpack: config => { config.module.rules.delete("svg"); //重点:删除默认配置中处理svg, //const ...

  6. 【codeforces 750C】New Year and Rating

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  7. 慕课网electron写音乐播放器教程,代码跟随教程变动(十)

    添加播放状态,首先是歌曲名称和时间 在index.html中添加 <div class="container fixed-bottom bg-white pb-4"> ...

  8. Effective TestStand Operator Interfaces

    目录 为什么要使用操作员界面? 是什么决定一个好的界面? 用户的类型 和 界面的必要元素 TestStand 架构 TestStand 自带的例子 自定义用户界面 TestStand 提供的三个管理控 ...

  9. 计算机专业如何高质量的走完大学四年?毕业成为Offer收割机

    前言:迷茫本就是青春该有的模样,但不要让未来的你讨厌现在的自己. "就要毕业了. 回头看自己所谓的大学生活, 我想哭,不是因为离别,而是因为什么都没学到. 我不知,简历该怎么写,若是以往我会 ...

  10. Java 迭代器须知 | “for each”与迭代器的关系

    Iterator接口包含4个方法: 通过反复调用next方法就可以逐个访问集合中的每个元素.需要注意,如果到达了集合的末尾,再次调用next方法将会抛出一个NoSuchElementException ...