`

oracle子句的执行顺序

 
阅读更多

一个SQL会包含很多个子句,在写SQL时,理解SQL个部分子句执行的优先级非常重要,否则可能会导致简单的SQL变成多个嵌套的SQL,更可能导致错误的返回结果。

下面通过一个例子说明各子句的优先级:


select a,b,count(sum(c)) over ()
from t
where t.d=1
start with e is not null connect by prior f=g
group by a,b
having sum(c)>100
order by 3;

这个SQL包含:
1. SELECT 子句
2. group by子句
3. 分析函数
4. from子句
5. where子句
6. start with...connect by子句
7. having子句
8. order by子句


对于FROM子句,可以简单理解为表或者扫描扫描(如果涉及到多表关联就复杂了,这里不讨论);
对于SELECT子句,从执行计划看是在最后执行的,我把它理解为返回数据给用户,而不是读取数据,读取数据是在FROM这个步骤执行的,所以我认为顺序是:

4 -> 6 -> 5 -> 2 -> 7 -> 3 -> 8 -> 1

from子句 -> start with...connect by子句 -> where子句 -> group by子句 -> having子句 -> 分析函数 -> order by子句 -> SELECT 子句

要注意,以上的顺序只代表一般情况,不一定所有的情况都按照这个执行顺序,尤其是同时有group by和order by时。例如:

select a,b,count(sum(c)) over ()
from t
where t.d=1
start with e is not null connect by prior f=g
group by a,b
having sum(c)>100
order by a;

这个SQL的执行顺序就有可能是:4->6->5-> 2 + 8 ->7->3->1。实际执行顺序以执行计划为准,但是这里特别要记住的是不管SQL怎么样,以下部分的优先级是确定的:

start with...connect by子句 -> where子句 -> group by子句 -> having子句 -> 分析函数

分享到:
评论

相关推荐

    oracle select执行顺序的详解

    SQL Select语句完整的执行顺序:1、from子句组装来自不同数据源的数据;2、where子句基于指定的条件对记录行进行筛选;3、group by子句将数据划分为多个分组;4、使用聚集函数进行计算;5、使用having子句筛选分组;...

    SQL语句执行顺序说明

    4. **HAVING子句**:HAVING子句用于对分组后的结果进行进一步的过滤,其执行顺序在GROUP BY之后。 5. **SELECT子句**:最后是SELECT子句,选择需要返回的数据列。这里需要注意的是,少用通配符“*”,而是明确指定...

    ORACLE-Select语句执行顺序及如何提高Oracle基本查询效率.pdf

    ORACLE-Select语句执行顺序及如何提高Oracle基本查询效率 在Oracle中,SQL语句的执行顺序是非常重要的。了解了SQL语句的执行顺序,我们可以更好地优化SQL语句,提高查询效率。下面我们将详细介绍ORACLE-Select语句...

    ORACLE 优化sql语句提高oracle执行效率 .doc

    1. 选择最有效率的表名顺序:在基于规则的优化器中,Oracle 的解析器按照从右到左的顺序处理 FROM 子句中的表名。因此,在包含多个表的连接查询中,需要选择记录条数最少的表作为基础表。如果有三个以上的表连接查询...

    sql解析顺序

    SQL 语句的解析顺序是一个复杂的过程,它涉及到多个步骤和子句的执行顺序。在这篇文章中,我们将详细地讲述 SQL 语句的解析顺序,包括 FROM、WHERE、GROUP BY、HAVING、SELECT 等子句的执行顺序。 首先,FROM 子句...

    SQL查询原理及执行顺序

    ### SQL查询原理及执行顺序详解 SQL(Structured Query Language)是一种用于管理关系型数据库的标准语言,其查询原理和执行顺序对于数据库性能优化至关重要。本文将深入探讨SQL查询的执行过程,帮助读者理解如何...

    oracle执行计划文档

    它揭示了Oracle数据库如何执行SQL语句的详细步骤,包括数据的获取方式、处理顺序以及使用的索引等信息。以下是对执行计划中涉及的一些核心概念的详细解释: 1. **Rowid**: Rowid是一个唯一标识数据库中每行数据的...

    在Oracle里加快SQL执行的三种方法

    "Ordered"提示允许我们指导Oracle按照FROM子句中指定的顺序进行表连接,其中第一个表作为驱动表,通常应选择返回行数最少的表。这样可以避免耗时的自动分析,并直接使用预设的合并顺序,从而加速查询执行。例如,如...

    08.Oracle的where子句1

    虽然存在优先级规则,但为了避免混淆,通常建议使用括号明确表达式执行顺序。 WHERE子句的运用非常广泛,可以通过组合不同的字段、比较运算符和逻辑运算符,实现对复杂查询需求的支持。在实际的数据库管理工作中,...

    Oracle数据库中ORDER BY排序和查询按IN条件的顺序输出

    本文将深入探讨`ORDER BY`子句在Oracle中的排序机制,以及查询时根据`IN`条件顺序输出的方法。 首先,`ORDER BY`用于指定查询结果的排序方式,可以基于一个或多个列进行升序(ASC)或降序(DESC)排序。然而,...

    提高Oracle中SQL的执行效率

    本文将详细介绍几种有效的方法来提高Oracle中SQL的执行效率,包括选择合适的表名顺序、优化WHERE子句中的连接顺序、减少不必要的数据库访问等策略。 #### 1. 选择最有效率的表名顺序 在基于规则的优化器中,Oracle...

    Oracle提高查询效率的方法

    11. GROUP BY 和 HAVING 字句的使用:在 GROUP BY 和 HAVING 字句之前尽量剔除多余的行, GROUP BY 和 HAVING 的执行顺序应该如下最优:select 的 Where 字句选择所有合适的行,Group By 用来分组个统计行,Having ...

    Oracle 执行计划与查询优化

    了解并分析这些概念,有助于我们制定有效的查询优化策略,例如创建适当的索引、调整连接顺序、优化谓词条件等,从而提升Oracle数据库的整体性能。在实际工作中,可以使用EXPLAIN PLAN或SQL Trace等工具来查看和分析...

    oracle,sqlserver及mysql对比

    Oracle、SQL Server 及 MySQL 的查询语句执行顺序相同:开始->FROM 子句->WHERE 子句->GROUP BY 子句->HAVING 子句->ORDER BY 子句->SELECT 子句->LIMIT 子句。每个子句执行后都会产生一个中间结果,供接下来的子句...

    oracle开窗函数学习技巧总结

    `OVER`函数是Oracle开窗函数的核心组成部分,它定义了一个计算上下文或窗口,在这个窗口内可以执行各种类型的聚合计算。`OVER`函数的基本语法如下: ``` function_name(...) OVER (window_specification) ``` 其中...

    优化sql语句提高oracle执行效率(34种方法).doc

    在Oracle数据库管理中,优化SQL...同时,了解SQL的工作流程,何时应用特定的条件过滤,如ON、WHERE和HAVING的执行顺序,也是优化的关键。在适当的地方使用这些技巧,可以避免不必要的计算和排序,从而提升整体性能。

    优化sql语句提高oracle执行效率(34种方法).pdf

    Oracle的解析器在处理`FROM`子句中的表名时遵循从右至左的顺序。为了提升查询效率,应当将记录条数最少的表放在`FROM`子句的最后位置,即作为基础表。对于涉及三个或以上表的连接查询,应选择交叉表作为基础表。所谓...

    Oracle+SQL性能优化40条.docx

    * ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名 * 选择交叉表作为基础表 六、Where 子句中的连接顺序 * Oracle 采用自下而上或自右向左的顺序解析 WHERE 子句 * 表之间的连接必须写在其他 WHERE 条件...

    Oracle数据库关于SQL的执行计划

    - **查询条件不匹配**:如果 WHERE 子句中的条件与索引的列顺序不一致,或者使用了函数操作,也可能导致索引无法被有效利用。 - **表扫描成本较低**:对于较小的表,全表扫描的成本可能比使用索引更低,尤其是在...

Global site tag (gtag.js) - Google Analytics