`
guoyanxi
  • 浏览: 271358 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

oracle sql解析顺序

阅读更多
今天被问到了一个where rownum与order by的顺序问题
实践了一下,没有太大问题
但是对于一个过了007的人来说是很不应该的
附上sql解析顺序:
引用

标准的SQL语句,其select各子句解析顺序如下:

第一为from子句:因为最先确定的就是范围,即该对哪个表或者视图进行操作。

第二是where子句:它的作用是将从from语句中返回的结果进行检查,不满足where语句所设的限定条件者将消除。



select * from student

where sno not like '120'

这里面sno为学号的意思,这个语句的意思是说查询student表中的所有学生(除了学号是120)的信息。首先执行from语句,将student表中的所有信息列出来,然后执行where语句,去掉学号是120的学生信息。

第三是group by语句:如果声明了group by语句,返回的结果就会以组为单位显示。

这里要注意group by的使用:如果没有出现在group by后面的列,它是不可能出现在select语句后面的。因为group by的作用是分组,没有出现在group by后面的列是不按其分组的,而同时他又出现在select语句后面,就是说要先按别的列进行分组之后,再显示这个列,而这是不可能实现的。

如果声明了group by语句,那么select语句之后只能有group by后面的列,以及聚集函数。

第四是聚集函数

第五是Having语句:其作用是在用group by分组之后,将不满足条件的组消除掉。它和where的区别就是它作用于组,而where只作用于单个的元组(也就是行)。

第六:计算所有表达式

第七:order by排序语句。
分享到:
评论

相关推荐

    sql解析顺序

    sql解析顺序,sql中包含select,from,join,on,where,group by,having,order by的解析顺序

    Oracle Sql 性能优化

    ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表...

    Oracle SQL性能优化

    ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表...

    oracle SQL性能优化

    ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表...

    ORACLE_SQL语句优化技术分析

    ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表...

    oracle的sql优化

     Oracle按照从右到左的顺序对数据表进行解析。因此From最后面的表为基础表,一般要选择记录数最少的表作为基础表。  对于Where条件的顺序,过滤到最大查询记录数量的条件必须写在Where条件的结尾处。  Where条件...

    ORACLE_SQL性能优化

    ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表...

    ORACLE SQL性能优化系列

    为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享. 因此,当你执行一个...

    Oracle+SQL大全解析

    数据库语言解析 各种数据库的流程 目录........................................................................................................................................ 2 第 1章 模块功能概要描述.....

    ORACLE优化SQL语句,提高效率

     Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,您必须选择记录条数最少的表作为基础表。假如有3个以上的表...

    oracle_sql性能优化

    为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享. 因此,当你执行一个...

    Oracle_SQL优化

    选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你...

    深入解析Oracle.DBA入门进阶与诊断案例

    针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手...

    Oracle SQL性能优化系列学习二

     选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况...

    SQL数据库资源大放送

    ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表...

    SQL编写规范(数据库操作规范)

     ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving table)将被最先处理    在FROM子句中包含多个表的情况下,必须选择记录条数最少的表作为基础表    当...

    Orcle面试知识点

    ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表...

    ORACLE数据库SQL语句的执行过程

    在回答这个问题前,我们先来回顾一下:在ORACLE数据库架构下,SQL语句由用户进程产生,然后传到相对应的服务端进程,之后由服务器进程执行该SQL语句,如果是SELECT语句,服务器进程还需要将执行结果回传给用户进程。...

    Oracle客户端连接Oracle服务器.docx

    这个文件类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应,只有当sqlnet.ora中类似NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有TNSNAMES时,才会尝试使用这个文件。...

    Oracle优化53解

    为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。 因此,当你...

Global site tag (gtag.js) - Google Analytics