`
扬州老鬼
  • 浏览: 302424 次
  • 性别: 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
分享到:
评论

相关推荐

    mysql面试题 包含 初级 中级 高级 各级别知识点.rar

    SQL语句执行顺序 null的含义 MySQL、SqlServer、oracle写出字符存储、字符串转时间 update语句可以修改结果集中的数据吗? B树和B+树的区别 你见过索引吗? 建索引的原则 索引的类型, 如主键索引 查看SQL执行...

    Oracle数据库Sql性能调优

    1.39 用UNION-ALL 替换UNION ( 如果有可能的话) 24 1.40 使用提示(HINTS) 25 1.41 用WHERE替代ORDER BY 25 1.42 避免改变索引列的类型. 26 1.43 需要当心的WHERE子句 27 1.44 连接多个扫描 28 1.45 CBO下使用更具...

    oracle sql performance tuning

    3.2 UNION ALL效率比UNION高很多 6 3.3 一些很耗资源的SQL操作,在不必要的情况下不要使用 6 3.4 通常联接查询比子查询的效率要高很多 7 3.5 用TABLE 索引(INDEX)栏位去做TABLE间的关联,可避免费时的全表扫描 7 ...

    SQL普查优化信息汇总

    考虑使用union all代替多个or连接操作 如果经常执行主细表的联合查询,建立外键索引 考虑使用非唯一索引支持唯一性约束条件 主动的确定使用循环嵌套、合并连接、散列连接,尽可能测试使用一种代价较小的连接方式。 ...

    SQL性能优化

     实际大部分应用中是不会产生重复的记录,推荐采用UNION ALL操作符替代UNION,因为UNION ALL操作只是简单的将两个结果合并后就返回。  Exists 示例:当有 A、B 两个结果集,当结果集 B 很大时,A 较小时,适用 ...

    没内鬼,来点干货!SQL优化和诊断

    显示本行是简单或复杂select,如果查询有任何复杂的子查询,则最外层标记为PRIMARY(DERIVED、UNION、UNION RESUIT) table 访问引用哪个表(引用某个查询,如“derived3”) type 数据访问/读取操作类型(All、...

    SQL培训第一期

    union 会对查询数据进行去重并排序,union all只是简单的将两个结果合并。 1.8.8 wm_concat 1.8.8.1 语法 select wm_concat(t.role_name) from g_role t where t.role_name like '%书记%' 1.8.8.2 说明 拼接字符串,...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    4.2.1 UNION和UNION ALL 103 4.2.2 MINUS 106 4.2.3 INTERSECT 107 4.3 集合与空值 108 4.3.1 空值与非直观结果 108 4.3.2 集合运算中的空值行为 110 4.3.3 空值与GROUP BY和ORDER BY 112 4.3.4 空值与聚合...

    关系型数据库性能体系设计和效率提升.docx

    7.12 尽量用union all替换union 24 7.13 使用DECODE函数来减少处理时间 24 7.14 尽量避免用order by 25 7.15 用Where子句替换HAVING子句 25 7.16 减少多表关联 25 7.17 避免重复访问 26 7.17.1 使用group by 26 7.17...

    SQLServer2008查询性能优化 2/2

    11.6.3 使用UNION ALL代替UNION 304 11.6.4 为聚合和排序操作使用索引 305 11.6.5 避免在批查询中的局部变量 306 11.6.6 小心地命名存储过程 309 11.7 减少网络传输数量 311 11.7.1 同时执行多个查询 311 11.7...

    SQLServer2008查询性能优化 1/2

    11.6.3 使用UNION ALL代替UNION 304 11.6.4 为聚合和排序操作使用索引 305 11.6.5 避免在批查询中的局部变量 306 11.6.6 小心地命名存储过程 309 11.7 减少网络传输数量 311 11.7.1 同时执行多个查询 311 11.7...

    T-SQL高级查询

    1、 union和union all进行并集运算 --union 并集、不重复 select id, name from student where name like 'ja%' union select id, name from student where id = 4; --并集、重复 select * from student where ...

    精通SQL 结构化查询语言详解

    16.3.4 触发器的触发次序和触发谓词的使用  16.3.5 Oracle触发器的管理  第17章 SQL中游标的使用  17.1 SQL游标的基本概念  17.1.1 游标的概念  17.1.2 游标的作用及其应用 17.2 SQL游标的使用 17.2.1...

    MYSQL常用命令大全

     此操作使testuser能够在每一个test数据库中的表执行SELECT,INSERT和DELETE以及UPDATE查询操作。现在我们结束操作并退出MySQL客户程序:  mysql> exit  Bye9! 1:使用SHOW语句找出在服务器上当前存在什么...

    OCA认证考试指南1Z0-051

    9.2.1 UNIONALL运算符 9.2.2 UNION运算符 9.2.3 INTERSECT运算符 9.2.4 MINUS运算符 9.2.5 更复杂的示例 9.3 控制返回行的顺序 9.4 认证小结 9.5 本章 测试题 9.5.1 自测题 9.5.2 实验题 9.5.3 ...

    MySQL命令大全

     此操作使testuser能够在每一个test数据库中的表执行SELECT,INSERT和DELETE以及UPDATE查询操作。现在我们结束操作并退出MySQL客户程序:  mysql> exit  Bye9! 1:使用SHOW语句找出在服务器上当前存在什么...

    精通SQL--结构化查询语言详解

    16.3.4 触发器的触发次序和触发谓词的使用 343 16.3.5 oracle触发器的管理 346 第17章 sql中游标的使用 349 17.1 sql游标的基本概念 349 17.1.1 游标的概念 349 17.1.2 游标的作用及其应用 350 17.2 sql游标的...

    SQL语法大全

    SQL语法大全 SQL语法大全 1. ASP与Access数据库连接: dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access ...

Global site tag (gtag.js) - Google Analytics