zoukankan      html  css  js  c++  java
  • 【转】oracle条件子句执行顺序

    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

  • 相关阅读:
    如何让你的网站排名靠前
    经典ASP代码大集合
    防刷新重复提交、防后退方法
    ASP.NET中数据库数据导入Excel并打印
    制作网页过程中经常要用到的代码
    在ASP.NET中使用Microsoft Word文档
    document对象详解
    用XP做服务器突破iis10人限制
    自动选择网通电信服务器
    PHP笔记——获取文件扩展名
  • 原文地址:https://www.cnblogs.com/ikuman/p/3389135.html
Copyright © 2011-2022 走看看