`
扬州老鬼
  • 浏览: 305793 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

union all 的执行顺序

阅读更多
IQ下面做应用开发的时候,遇到一个好玩的事情:

情况1中,发现一个规律,union all 中执行顺序是:
以第一个union all 的select 语句(如 红色标记)为分界线。
先从最后union all的select(如蓝色标记)开始倒序输出到 红色标记的select子句,
再输出第一个select子句
最后输出红色标记的select子句

        select '1' AREA_NAME
        union all 
	[color=red]select '3' AREA_NAME [/color]
        union all 
        select distinct  '2'AREA_NAME
        from DW.AREA
        where (area_type_id =2 and  up_area_code = '00' ) or  up_area_code = '-1' 
        union all 
        [color=blue]select '4' AREA_NAME[/color]

结果如下:
AREA_NAME
4
2
1
3


        select '1' AREA_NAME
        union all 
        select distinct  '2'AREA_NAME
        from DW.AREA
        where (area_type_id =2 and  up_area_code = '00' ) or  up_area_code = '-1'        
        union all 
		select '3' AREA_NAME 
        union all 
        select '4' AREA_NAME

结果如下:
AREA_NAME
4
3
1
2


        select '1' AREA_NAME
        union all 
        select distinct  '2'AREA_NAME
        from DW.AREA
        where (area_type_id =2 and  up_area_code = '00' ) or  up_area_code = '-1'        
        union all 
		select '3' AREA_NAME 
        union all 
        select '4' AREA_NAME
         union all 
        select distinct  '5' AREA_NAME
        from DW.AREA
        where (area_type_id =2 and  up_area_code = '00' ) or  up_area_code = '-1'       


AREA_NAME
5
4
3
1
2


这里面表DW.AREA为真实表。

情况2,如果下面这种情况下:
       select '1' AREA_NAME
        union all 
	select '2' AREA_NAME
        union all 
        select '3' AREA_NAME
        union all 
        select '4' AREA_NAME

AREA_NAME
'1'
'4'
'3'
'2'

        select '2' AREA_NAME
        union all 
        select '1' AREA_NAME
        union all 
        select '4' AREA_NAME
        union all 
        select '3' AREA_NAME

AREA_NAME
'2'
'3'
'4'
'1'

如union all的表不存在的时候,即单纯select子句,输出顺序就变成了:
1.第一select 输出。
2.此后从最后一个select倒序输出。

上述为我目前看到的现象。
具体什么原因,等后面有时间了的话,会好好探究的。
估计和cursor生成的信息有关。mark 一下。
0
0
分享到:
评论

相关推荐

    sqlserver Union和SQL Union All使用方法

    `UNION ALL`与`UNION`类似,但不执行任何去重操作。它会保留所有选定的行,包括可能存在的重复行。使用`UNION ALL`的语法如下: ```sql SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) ...

    Oracle中Union与Union All的区别(适用多个数据库)

    在数据库查询中,`UNION` 和 `UNION ALL` 是两个关键的SQL操作,主要用于合并多个 `SELECT` 语句的结果。它们的主要区别在于如何处理重复的行。 `UNION` 操作符用于合并两个或多个 `SELECT` 查询的结果集,但会自动...

    简单了解MySQL union all与union的区别

    由于`UNION ALL`不进行排序,返回的结果集的顺序可能与`UNION`查询的不同,除非明确指定了排序规则。 总结来说,`UNION`和`UNION ALL`的选择取决于你对结果集的需求。如果你需要合并数据并且不关心重复,或者需要...

    Mysql 关键字执行顺序

    9. UNION/UNION ALL:用于合并多个SELECT语句的结果,UNION会去除重复行,UNION ALL则保留所有行。 10. ORDER BY:对结果集进行排序。 11. LIMIT:最后,LIMIT用于获取指定数量的记录,常用于分页查询。 关于执行...

    mysql执行计划id为空(UNION关键字)详解

    如果需要包含重复的行,可以使用`UNION ALL`替代,这样不会进行去重操作。 `UNION`操作符的语法结构如下: ```sql SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2 ``` 在...

    06-3-数据库查询-合并查询结果并去重

    - **性能差异**:`UNION ALL`比`UNION`执行速度快,因为它不需要额外的步骤来检查重复行。因此,在不关心重复行的情况下,建议优先考虑使用`UNION ALL`。 - **NULL 值**:`UNION`和`UNION ALL`都会将`NULL`值视为...

    Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数(转载)

    SELECT 1 AS aa UNION ALL SELECT 2 UNION ALL SELECT 2 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 9 ); `...

    mysql 优化.docx

    本文将从EXPLAIN命令、SQL语句优化、索引的使用、排序和限制、union和union all的差异、ORDER BY RAND()的优化、in和exists的区分、分页方式的优化、分段查询等角度来讨论MySQL优化策略。 一、EXPLAIN命令的使用 ...

    mysql文档执行计划

    1. **id**:标识查询中执行的顺序,同一id表示一组同时执行的操作,id值越大,表示越先执行。 2. **select_type**:表示查询的类型,包括SIMPLE(简单查询)、PRIMARY(外层查询)、SUBQUERY(子查询)、DERIVED...

    MYSQL执行计划详解.pdf

    - `type` 是SQL查询优化中非常重要的一个指标,表示表的连接类型,从最优到最差的顺序为:`system` > `const` > `eq_ref` > `ref` > `range` > `index` > `ALL`。 - `system`:通常用于系统表,这类表数据量小,数据...

    MySQL 40 道面试题及答案.docx

    * SQL 语句的执行顺序是:FROM、WHERE、JOIN、ON、GROUP BY、HAVING、SELECT、DISTINCT、UNION、ORDER BY、LIMIT。 数据库设计 * 数据库设计方面的经验包括:避免使用外键约束,避免使用三大范式来设计数据库等。 ...

    MYSQL执行计划及索引最佳实践

    - **ID**:一组数字,表示执行SQL子句或操作表的顺序。ID相同的子句按从上到下的顺序执行;子查询中ID的序号会递增,id值越大优先级越高,越先被执行;在所有组中,ID值越大,优先级越高,越先执行。 - **SELECT_...

    oracle 10g培训资料——SQL第二部分

    - 可以使用括号来控制操作的执行顺序。 - ORDER BY子句通常应用于整个集合操作的最后,可以按第一个SELECT语句的列名、别名或位置号进行排序。 - 除了UNION ALL之外,其他集合操作会自动去除重复行并进行排序。 - ...

    SQL语句调优

    其中的差异是因为 UNION 有排除重复行并且对结果进行排序的副作用,而 UNION ALL 不会做这些工作。选择无重复行的结果需要建立临时工作表,用它排序所有行并且在输出之前排序。在大部分情况下 UNION ALL 更具效率。 ...

    SQL 学习

    因此,理解执行顺序有助于优化查询。 6. **兼容性**:虽然`UNION`在大多数SQL方言中可用,但每个数据库系统可能有自己的特定行为和限制。例如,MySQL和PostgreSQL支持在`UNION`中使用子查询,而某些其他数据库可能...

    102 透彻研究通过explain命令得到的SQL执行计划(3).pdf

    通过查看执行计划,用户可以了解到SQL语句执行过程中的重要细节,如表的访问顺序、访问方式、使用的索引等。 在给出的文档内容中,通过分析一个包含子查询的SQL语句的执行计划,我们可以看到如何通过explain命令去...

    t-sql整理实例小书

    这里的`UNION ALL`用于合并多个查询结果集,保留所有记录,即使有重复也会一并返回。 ### 2. 数据窗口函数 接下来的代码展示了如何使用数据窗口函数来进行数据分析。 #### 密集排名函数(DENSE_RANK) ```sql WITH...

Global site tag (gtag.js) - Google Analytics