`
newleague
  • 浏览: 1500757 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

SQL查询顺序处理

 
阅读更多

select的解析执行顺序1. from语句 2. where语句 (结合条件) 3. start with语句 4. connect by语句 5. where语句 6. group by语句 7. having语句 8. model语句 9. select语句 10. union、minus、intersect等集合演算演算11. order by语句

 

SQL逻辑查询处理

如下代码清单:

(8) SELECT   (9) DISTINCT   (11)        <TOP_specification>     <select_list>

(1) FROM      <left_table>

(3)          <join_type> JOIN <right_table>

(2)          ON <join_condition>

(4)   WHERE <where_condition>

(5) GROUP BY <group_by_list>

(6) WITH {CUBE   |      ROLLUP}

(7) HAVING <having_condition>

(10) ORDER BY <order_by_list>

 

以上的一个SQL语句,就是按照上面的序号的顺序来执行,每个步骤会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只有最后一步生成的表才会返回给调用者。

 

步骤一,FROM:对FROM子句中的两个表执行笛卡尔积(交叉连接),生成虚拟表VT1。

步骤二, ON:对VT1应用ON筛选器。只有那些使<join_condition>为真的行才被插入VT2。

步骤三,OUTER(JOIN):如果指定的OUTER JOIN (相对于CROSS   JOIN或 INNER JOIN),保留表(preservedt able)中未找到匹配的行将作为外部行添加到VT2,生成VT3。如果FROM子句中包含两个以上的表,则对上一个联接生成的结果表与下一个表重复执行步骤一到步骤三,直到所有的表为止。

步骤四,WHERE:对VT3应用WHERE筛选器。只有使<where_condition>为TRUE的行才会被插入VT4。

步骤五,GROUP BY :按GROUP BY子句中的列表对VT4中的行分组,生成VT5。

步骤六,CUBE|ROLLUP:把超组(Supergroups)插入VT5,生成VT6。

步骤七,对VT6应用HAVING 筛选器。只有使<having_condition>为TRUE的租才会被插入VT7。

步骤八,SELECT:处理SECLECT列表,产生VT8。

步骤九,DISTINCT:讲重复的行从VT8中移除,产生VT9。

步骤十,ORDER BY :将VT9中的行按ORDER BY子句中列列表排序,生成一个游标(VC10)。

步骤十一,从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回给调用者。

 

以上步骤的注意点:

1.       如果步骤三中联接两个以上的表,将会对VT3和FROM子句中第三张表重复执行步骤一到步骤三。

2.       在步骤四中,因为数据还未被分组,这里还不能使用聚合筛选器。例如:不能使用

Where orderdate=Max(orderdate)。也不能引用SELECT 列表中别名,因为SELECT列表这时还未被处理。

3.       步骤三与步骤四中关于ON与Where筛选器的区别,只有在使用外部联接时,才会出现ON与Where这种逻辑差别。当使用内部联接时,在哪里制定逻辑表达式都无所谓,因为步骤三将被跳过。这些筛选器相继被应用,中间没有任何步骤。

二者之间的主要区别是,ON是在添加外部行(步骤三)之前被应用,而Where是在步骤三之后被应用。ON筛选器对保留中部分行的移除并不是最终的,因为步骤三回把这些行再添加进来,而Where筛选器对行的移除是最终的。

4.       步骤七中,Having是第一个也是唯一一个应用到已分组数据的筛选器。

5.       步骤八中,在Select列表中创建的别名不能在前面的步骤使用。实际上表达式别名甚至不能用于Select列表中其他表达式。你只能在Select列表后面的步骤中(如:Order By步骤)使用列的别名。

6.       步骤十中,这一步不同于其他步骤的是,该步骤返回的是一个游标。SQL是基于集合理论的。集合不会预先对它的行排序,它只是成员的逻辑集合,成员的顺序无关紧要。对表进行的查询可以返回一个对象,包含按特定物理顺序组织的行。ANSI把这种对象称为游标。             尽管SQL并不为表的行程序特定的顺序,但它却按特定的顺序维护列的位置。指定Select * 可以确保按照特定顺序返回


分享到:
评论

相关推荐

    SQL查询原理及执行顺序

    #### SQL查询完整执行顺序与逻辑处理步骤 SQL查询的执行顺序遵循一定的逻辑流程,包括: 1. **FROM**:组装来自不同数据源的数据。 2. **WHERE**:基于条件筛选记录行。 3. **GROUP BY**:将数据划分为多个分组。 ...

    sql执行顺序大总结

    SQL 执行顺序大总结 SQL 执行顺序是一个非常重要的概念,对于任何一个 SQL 开发者来说都非常重要。今天,我们将深入探讨 SQL 执行顺序的每一个步骤,从 FROM 到 SELECT,了解每一个步骤的执行顺序和细节。 FROM ...

    sql查询的逻辑执行顺序

    ### SQL查询的逻辑执行顺序详解 #### 一、引言 SQL(Structured Query Language)作为数据库操作的标准语言,在数据检索、管理和分析方面扮演着至关重要的角色。为了更高效地理解和优化SQL查询,了解其背后的执行...

    sql解析顺序

    SQL 解析顺序 SQL 语句的解析顺序是一个复杂的过程,它涉及到多个步骤和子句的执行顺序。在这篇文章中,我们将详细地讲述 SQL 语句的解析顺序...理解 SQL 语句的解析顺序可以帮助我们更好地编写高效的 SQL 查询语句。

    SQL查询及操作 SQL查询及操作

    你可以选择查询所有列(使用`*`),或者指定部分列,并可以控制列的显示顺序。此外,你还可以重命名列标题,如`昵称=nickname,电子邮件=email`。如果希望去除重复行,可以使用`DISTINCT`关键字。同时,`TOP n`或`TOP...

    SQL语句执行顺序说明

    SQL语句的执行顺序决定了其性能表现,理解这一点对于优化查询至关重要。以下是一些基本的执行顺序: 1. **FROM子句**:首先处理FROM子句,确定需要操作的表或视图。Oracle从右向左处理表名,最后一个表名为驱动表。...

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

    《Microsoft SQL Server 2008技术内幕:T-SQL查询》全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化...

    sql查询分析器分离版本

    - **查询优化**:选择最佳的执行计划,这可能涉及索引的选择、查询顺序的调整等。 - **执行查询**:根据优化后的计划执行SQL语句,并返回结果。 2. **分离版本的含义**: “分离版本”通常意味着该查询分析器...

    sqlserver死锁处理

    ### SQL Server 死锁处理详解 #### 一、引言 在 SQL Server 数据库系统中,当两个或多个事务在等待对方释放资源时,就会发生死锁现象。死锁不仅会降低系统的整体性能,还可能导致数据处理异常中断,严重影响业务...

    SQL语句执行深入讲解(MySQL架构总览-查询执行流程-SQL解析顺序)

    本文将深入探讨MySQL数据库系统中的SQL语句执行过程,包括MySQL的架构总览、查询执行流程以及SQL语句的解析顺序。 首先,我们来看MySQL的架构总览。MySQL架构分为两个主要层次:SQL Layer(SQL层)和Storage Engine...

    java SQL查询分析器开发

    这可能涉及重写查询(query rewriting)、选择最佳连接顺序、决定是否使用索引等。 5. **执行计划生成**:最后,分析器将优化后的查询转换为具体的数据库操作,如扫描、排序、连接等,形成执行计划。 在Java中开发...

    SQL语言查询优化方案探究

    SQL查询效率的高低直接关系到数据的响应速度和系统的使用体验,尤其在大规模或复杂数据环境中,如联机事务处理(OLTP)或决策支持系统(DSS),查询效率的影响更为显著。 #### 二、影响SQL查询效率的主要因素 通过...

    多关系SQL查询中连接顺序的优化.pdf

    本文深入探讨了多关系SQL查询中连接顺序的优化问题,并提供了实际应用案例。在详细介绍之前,我们需要了解数据库优化器的角色以及它如何确定SQL查询的执行计划。 ### 数据库优化器的作用 数据库优化器的主要职责是...

    如何设计高效合理的SQL查询语句

    DBMS处理查询计划的过程大致如下: 1. 首先,DBMS会对提交的SQL语句进行词法和语法检查。 2. 然后,将语句提交给查询优化器进行代数优化和访问路径优化。 3. 优化后的语句被预编译模块处理并生成查询规划。 4. 最后...

    SQL Server 查询处理中的各个阶段(SQL执行顺序)示例

    SQL Server 查询处理中的各个阶段,即SQL执行顺序,是数据库管理系统执行SQL语句时的一系列逻辑步骤。这个顺序对于理解查询如何工作以及优化查询性能至关重要。以下是对这些步骤的详细解释: 1. FROM子句:这是查询...

    SuperMap Objects .NET SQL查询使用OrderBy属性

    综上所述,SuperMap Objects .NET通过`OrderBy`和`GroupBy`属性提供了强大的SQL查询能力,帮助开发者处理和展示地理空间数据。理解并熟练运用这两个属性,可以有效地提高GIS应用的效率和用户体验。在提供的`SQLQuery...

    SQL查询入门教程,很实用。

    - **按条件读取记录**:SQL设计的一个特点是不允许按照特定的顺序读取记录,这是因为基于位置的操作会影响性能。在SQL中,只能通过指定条件来检索记录。 - 例如,`SELECT * FROM table_name WHERE name = 'Bill ...

    SQL Server查询中特殊字符的处理方法

    本篇将详细介绍如何处理SQL Server查询中的特殊字符。 首先,我们要了解最常见的一种特殊字符——单引号(')。在SQL Server中,单引号用于定义字符串常量。如果查询中需要包含单引号,必须使用两个单引号('')来表示...

    sql查询优化规则

    SQL语句的执行顺序对于理解查询如何进行以及如何优化查询至关重要。以下是一般情况下SQL语句的执行流程: 1. **FROM:** 对FROM子句中的前两个表执行交叉连接(笛卡尔积),生成虚拟表VT1。 2. **ON:** 对VT1应用ON...

Global site tag (gtag.js) - Google Analytics