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 一下。
分享到:
相关推荐
`UNION ALL`与`UNION`类似,但不执行任何去重操作。它会保留所有选定的行,包括可能存在的重复行。使用`UNION ALL`的语法如下: ```sql SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) ...
在数据库查询中,`UNION` 和 `UNION ALL` 是两个关键的SQL操作,主要用于合并多个 `SELECT` 语句的结果。它们的主要区别在于如何处理重复的行。 `UNION` 操作符用于合并两个或多个 `SELECT` 查询的结果集,但会自动...
由于`UNION ALL`不进行排序,返回的结果集的顺序可能与`UNION`查询的不同,除非明确指定了排序规则。 总结来说,`UNION`和`UNION ALL`的选择取决于你对结果集的需求。如果你需要合并数据并且不关心重复,或者需要...
9. UNION/UNION ALL:用于合并多个SELECT语句的结果,UNION会去除重复行,UNION ALL则保留所有行。 10. ORDER BY:对结果集进行排序。 11. LIMIT:最后,LIMIT用于获取指定数量的记录,常用于分页查询。 关于执行...
如果需要包含重复的行,可以使用`UNION ALL`替代,这样不会进行去重操作。 `UNION`操作符的语法结构如下: ```sql SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2 ``` 在...
- **性能差异**:`UNION ALL`比`UNION`执行速度快,因为它不需要额外的步骤来检查重复行。因此,在不关心重复行的情况下,建议优先考虑使用`UNION ALL`。 - **NULL 值**:`UNION`和`UNION ALL`都会将`NULL`值视为...
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 ); `...
本文将从EXPLAIN命令、SQL语句优化、索引的使用、排序和限制、union和union all的差异、ORDER BY RAND()的优化、in和exists的区分、分页方式的优化、分段查询等角度来讨论MySQL优化策略。 一、EXPLAIN命令的使用 ...
1. **id**:标识查询中执行的顺序,同一id表示一组同时执行的操作,id值越大,表示越先执行。 2. **select_type**:表示查询的类型,包括SIMPLE(简单查询)、PRIMARY(外层查询)、SUBQUERY(子查询)、DERIVED...
- `type` 是SQL查询优化中非常重要的一个指标,表示表的连接类型,从最优到最差的顺序为:`system` > `const` > `eq_ref` > `ref` > `range` > `index` > `ALL`。 - `system`:通常用于系统表,这类表数据量小,数据...
* SQL 语句的执行顺序是:FROM、WHERE、JOIN、ON、GROUP BY、HAVING、SELECT、DISTINCT、UNION、ORDER BY、LIMIT。 数据库设计 * 数据库设计方面的经验包括:避免使用外键约束,避免使用三大范式来设计数据库等。 ...
- **ID**:一组数字,表示执行SQL子句或操作表的顺序。ID相同的子句按从上到下的顺序执行;子查询中ID的序号会递增,id值越大优先级越高,越先被执行;在所有组中,ID值越大,优先级越高,越先执行。 - **SELECT_...
- 可以使用括号来控制操作的执行顺序。 - ORDER BY子句通常应用于整个集合操作的最后,可以按第一个SELECT语句的列名、别名或位置号进行排序。 - 除了UNION ALL之外,其他集合操作会自动去除重复行并进行排序。 - ...
其中的差异是因为 UNION 有排除重复行并且对结果进行排序的副作用,而 UNION ALL 不会做这些工作。选择无重复行的结果需要建立临时工作表,用它排序所有行并且在输出之前排序。在大部分情况下 UNION ALL 更具效率。 ...
因此,理解执行顺序有助于优化查询。 6. **兼容性**:虽然`UNION`在大多数SQL方言中可用,但每个数据库系统可能有自己的特定行为和限制。例如,MySQL和PostgreSQL支持在`UNION`中使用子查询,而某些其他数据库可能...
通过查看执行计划,用户可以了解到SQL语句执行过程中的重要细节,如表的访问顺序、访问方式、使用的索引等。 在给出的文档内容中,通过分析一个包含子查询的SQL语句的执行计划,我们可以看到如何通过explain命令去...
这里的`UNION ALL`用于合并多个查询结果集,保留所有记录,即使有重复也会一并返回。 ### 2. 数据窗口函数 接下来的代码展示了如何使用数据窗口函数来进行数据分析。 #### 密集排名函数(DENSE_RANK) ```sql WITH...