【SQL 学习】UNION 的排序方式!

简介:
(感谢 dingjun123版主 为本文提供帮助)
union怎么排序?
许多人肯定会说 根据第一字段来排序,呵呵,这个答案能得50分!考虑到如果select的第一个字段是重复时,会怎样?看一个测试!

SQL> select 1 id ,'a1' val ,'b1' text from dual
  2  union
  3  select 1 ,'a1' ,'b3' from dual
  4  union
  5  select 1 ,'a1' ,'b2' from dual;

        ID VA TE                                                                
---------- -- --                                                                
         1 a1 b1                                                                
         1 a1 b2                                                                
         1 a1 b3  --每个字段都有排序的。                                                              
从上面的结果可以看出,显然这不是根据第一字段来排序的,再看下一个:
SQL> select 1 id ,'a1' val ,'b1' text from dual
  2  union
  3  select 1 ,'a1' ,'b3' from dual
  4  union
  5  select 1 ,'a1' ,'b2' from dual
  6  union
  7  select 1 ,'a2' ,'b3' from dual
  8  union
  9  select 1 ,'a2' ,'b1' from dual
 10  union
 11  select 1 ,'a2' ,'b2' from dual;

        ID VA TE                                                                
---------- -- --                                                                
         1 a1 b1                                                                
         1 a1 b2                                                                
         1 a1 b3                                                                
         1 a2 b1                                                                
         1 a2 b2                                                                
         1 a2 b3                                                                

已选择6行。

基本上从这里可以得出 union 执行的排序是全量排序,即对select 语句所包含的所有字段进行排序
再次验证一下:

SQL> select 1 id ,'a1' val ,'b1' text from dual
  2  union
  3  select 1 ,'a1' ,'b3' from dual
  4  union
  5  select 1 ,'a1' ,'b2' from dual
  6  union
  7  select 1 ,'a2' ,'b3' from dual
  8  union
  9  select 1 ,'a2' ,'b1' from dual
 10  union
 11  select 1 ,'a2' ,'b2' from dual
 12  union
 13  select 2 ,'a1' ,'b2' from dual
 14  union
 15  select 2 ,'a2' ,'b1' from dual
 16  union
 17  select 2 ,'a2' ,'b2' from dual
 18  union
 19  select 2 ,'a2' ,'b3' from dual
 20  union
 21  select 3 ,'a2' ,'b3' from dual
 22  union
 23  select 3 ,'a1' ,'b2' from dual;

        ID VA TE                                                                
---------- -- --                                                                
         1 a1 b1                                                                
         1 a1 b2                                                                
         1 a1 b3                                                                
         1 a2 b1                                                                
         1 a2 b2                                                                
         1 a2 b3                                                                
         2 a1 b2                                                                
         2 a2 b1                                                                
         2 a2 b2                                                                
         2 a2 b3                                                                
         3 a1 b2                                                                
         3 a2 b3          - --可以看出每个字段有排序了!所以union是全量排序的~!                                                      
已选择12行。
另外,minus,intersect的排序也是按所有列出现的顺序全量排序!
相关文章
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
1442 56
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
11月前
|
SQL 数据格式
SQL 无法使用Union如何解决
SQL Server中使用UNION时,若字段含ntext类型会报错。可通过查询INFORMATION_SCHEMA.COLUMNS定位该字段,并用CAST转为nvarchar即可解决。
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
891 2
|
SQL 关系型数据库 MySQL
SQL中,可以使用 `ORDER BY` 子句来实现排序功能
【10月更文挑战第26天】SQL中,可以使用 `ORDER BY` 子句来实现排序功能
1869 6
|
SQL 存储 数据库
SQL学习一:ACID四个特性,CURD基本操作,常用关键字,常用聚合函数,五个约束,综合题
这篇文章是关于SQL基础知识的全面介绍,包括ACID特性、CURD操作、常用关键字、聚合函数、约束以及索引的创建和使用,并通过综合题目来巩固学习。
660 1
|
SQL 存储 关系型数据库
PostgreSQL核心之SQL基础学习
PostgreSQL核心之SQL基础学习
561 3
|
SQL 分布式计算 MaxCompute
SQL开发问题之对于ODPS中的UNION操作,执行计划的问题如何解决
SQL开发问题之对于ODPS中的UNION操作,执行计划的问题如何解决
406 7
|
SQL 分布式计算 资源调度
MaxCompute操作报错合集之执行SQL Union All操作时,数据类型产生报错,该怎么解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
483 1
|
SQL 存储 关系型数据库
详解 SQL 中的 UNION、MINUS 和 INTERSECT 命令
【8月更文挑战第31天】
1446 0
|
SQL 存储 数据库
深入理解 SQL UNION 运算符及其应用场景
【7月更文挑战第8天】SQL UNION 概述 `UNION` 运算符结合多个`SELECT`语句,生成不含重复行的结果集。基本语法是:`SELECT...FROM table1 UNION SELECT...FROM table2`。适用于整合相同结构数据表、不同条件查询结果及跨数据库数据。注意列数和数据类型需匹配,排序规则一致,大量操作可能影响性能。示例:合并`Students_Math`和`Students_Science`表中`StudentID`和`Grade`的数据。
666 0