zoukankan      html  css  js  c++  java
  • oracle中简单查询语句的格式及执行顺序分析

    一条简单的查询sql格式如下:

      SELECT ...

      FROM ....

      [WHERE ...] --过滤单行

      [GROUP BY ...   [HAVING ...]]--GROUP BY对前面where条件过滤后的结果进行分组,HAVING过滤行组

      

      [ORDER BY ...]--对结果进行排序

    eg: 现在有个exchangetime表,表结构如下

      名称                                            是否为空? 类型
     ----------------------------------------------- -------- --------------------------------
     ID                                              NOT NULL NUMBER(18)
     SYSTEM_TYPE                                     NOT NULL CHAR(1)
     TIME_KIND                                       NOT NULL NUMBER(10)
     TIME_NAME                                       NOT NULL VARCHAR2(16)
     BEGIN_TIME                                      NOT NULL NUMBER(10)
     END_TIME                                        NOT NULL NUMBER(10)

    查询语句及结果如下:

    SQL> list  

       1     select t.system_type, avg(t.begin_time) from exchangetime t

         2     where t.id < 10  

            3     group by t.system_type  

            4     having avg(t.begin_time)>110000  

            5*    order by system_type

    SQL> /

    SYSTEM_TYPE  AVG(T.BEGIN_TIME)

    ------------ -----------------

    0                       110750

    1                       150000

    SQL> spool off

    在上面这个查询语句中where t.id < 10 先对exchagetime中的记录进行过滤,过滤后的行由group by 按照system_type进行分组,接着having子句对行组进行过滤,只保留avg(t.begin_time)>110000的行,最后order by语句按照system_type字段将结果进行升序排列,得到最终结果。

    ps: 1、group by 后面可以不接having,但是如果有having子句的话必须与group by 语句结合使用

          2、where子句只能对单行进行过滤而不能过滤行组,过滤行组必须使用having子句,如where avg(t.begin_time)就是错误的。必须像上面的语句一样用having对行组进行过滤。

      

  • 相关阅读:
    合一算法最新版
    string.at(i)
    字符串逆转
    String
    Vector
    1005POJ
    但愿天堂一切都好
    合一算法
    合一算法2
    BTREE与其它索引的优缺点对比
  • 原文地址:https://www.cnblogs.com/tarbitrary/p/3989273.html
Copyright © 2011-2022 走看看