众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一些问题,记录备考。
假设我们有一个表Student,包括以下字段与数据:
drop table student;
create table student
(
id int primary key,
name nvarchar2(50) not null,
score number not null
);
insert into student values(1,'Aaron',78);
insert into student values(2,'Bill',76);
insert into student values(3,'Cindy',89);
insert into student values(4,'Damon',90);
insert into student values(5,'Ella',73);
insert into student values(6,'Frado',61);
insert into student values(7,'Gill',99);
insert into student values(8,'Hellen',56);
insert into student values(9,'Ivan',93);
insert into student values(10,'Jay',90);
commit;
Union和Union All的区别。
select *
from student
where id < 4
union
select *
from student
where id > 2 and id < 6
结果将是
1 Aaron 78
2 Bill 76
3 Cindy 89
4 Damon 90
5 Ella 73
如果换成Union All连接两个结果集,则返回结果是:
1 Aaron 78
2 Bill 76
3 Cindy 89
3 Cindy 89
4 Damon 90
5 Ella 73
可以看到,Union和Union All的区别之一在于对重复结果的处理。
接下来我们将两个子查询的顺序调整一下,改为
--Union
select *
from student
where id > 2 and id < 6
union
select *
from student
where id < 4
看看执行结果是否和你期望的一致?
--Union All
select *
from student
where id > 2 and id < 6
union all
select *
from student
where id < 4
那么这个呢?
据此我们可知,区别之二在于对排序的处理。Union All将按照关联的次序组织数据,而Union将进行依据一定规则进行排序。那么这个规则是?我们换个查询方式看看:
select score,id,name
from student
where id > 2 and id < 6
union
select score,id,name
from student
where id < 4
结果如下:
73 5 Ella
76 2 Bill
78 1 Aaron
89 3 Cindy
90 4 Damon
和我们预料的一致:将会按照字段的顺序进行排序。之前我们的查询是基于id,name,score的字段顺序,那么结果集将按照id优先进行排序;而现在新的字段顺序也改变了查询结果的排序。并且,是按照给定字段a,b,c...的顺序进行的order by。即结果是order by a,b,c...........的。我们看下一个查询:
select score,id,name
from student
where id > 2
union
select score,id,name
from student
where id < 4
结果如下:
56 8 Hellen
61 6 Frado
73 5 Ella
76 2 Bill
78 1 Aaron
89 3 Cindy
90 4 Damon
90 10 Jay
93 9 Ivan
99 7 Gill
可以看到,对于score相同的记录,将按照下一个字段id进行排序。如果我们想自行控制排序,是不是用order by指定就可以了呢?答案是肯定的,不过在写法上有需要注意的地方:
select score,id,name
from student
where id > 2 and id < 7
union
select score,id,name
from student
where id < 4
union
select score,id,name
from student
where id > 8
order by id desc
order by子句必须写在最后一个结果集里,并且其排序规则将改变操作后的排序结果。对于Union、Union All、Intersect、Minus都有效。
=================================================================================================================
Intersect和Minus的操作和Union基本一致,这里一起总结一下:
Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All,对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect,对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus,对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
可以在最后一个结果集中指定Order by子句改变排序方式。
分享到:
相关推荐
Oracle 递归函数介绍 Oracle 递归函数是一种特殊的PL/SQL函数,可以用于解决复杂的树形结构查询问题。递归函数可以自我调用,以便遍历树形结构的每个节点,直到达到停止条件。 在 Oracle 中,递归函数的定义语法...
Oracle 常用函数汇总大全 Oracle 是一个功能强大且广泛使用的关系数据库管理系统,提供了许多有用的函数来帮助开发者快速实现各种数据操作。下面是 Oracle 中一些常用的函数的汇总。 运算符 Oracle 中有多种...
本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as select * from scott.dept; create table emp as select * from ...
在描述中提到的场景中,有几种不同的方法可以实现数据统计,包括通过程序处理、使用临时表和包、标准SQL的UNION以及Oracle特有的分析函数。每种方法都有其优缺点。例如,程序处理方法与数据库无关,但增加了开发工作...
以上只是Oracle众多函数中的一部分,实际应用中还有更多如正则表达式处理的`REGEXP_LIKE()`,时间间隔处理的`INTERVAL`,以及用于集合操作的`UNION`、`INTERSECT`和`MINUS`等。学习并熟练掌握这些函数,能极大地提升...
Oracle数据库系统提供了丰富的内置函数,这些函数在处理SQL查询、数据操作和数据分析中扮演着重要角色。本篇文章将深入探讨Oracle内置函数的一些关键类别,包括数字格式元素和日期格式元素,帮助用户更好地理解和...
Oracle 集合操作函数 union、intersect、minus Oracle 集合操作函数是用于合并多条 SELECT 语句的结果的函数,包括 UNION、INTERSECT、MINUS 等。这些函数可以将多个查询结果合并成一个结果集,以便进一步处理和...
"Oracle函数大全中文API文档"是一个非常实用的资源,它提供了对Oracle数据库所有内置函数的详尽解释,帮助开发者和DBA快速理解和使用这些函数。 1. **日期与时间函数**: Oracle提供了处理日期和时间的大量函数,...
### SQLServer和Oracle常用函数对比 本文将详细探讨在SQLServer与Oracle数据库系统中常用的数学函数及字符串处理函数之间的差异。对于数据分析师、数据库管理员以及软件开发者而言,掌握这两种数据库管理系统之间的...
"Oracle 日期函数详解" Oracle 日期函数是数据库管理系统中经常使用到的函数,用于处理日期和时间相关的操作。下面是 Oracle 日期函数的详细介绍: 1. 日期和字符转换函数 Oracle 提供了两个重要的日期和字符转换...
Oracle数据库作为一个强大的关系型数据库管理系统,提供了多种高级操作函数来支持复杂的数据处理。以下是从标题、描述和部分内容中提取的Oracle高级操作函数的知识点。 ### 分支判断函数 #### DECODE函数 DECODE...
Oracle数据库系统中内置了大量的函数,这些函数极大地丰富了SQL查询语句的功能,使得数据库操作更加灵活和高效。本文主要探讨的是Oracle 8i版本中的内置函数,这些函数涵盖了数字、日期等多个方面,对于数据库开发和...
### Oracle内置函数大全 #### 数字格式元素 Oracle数据库提供了丰富的内置函数来处理各种类型的数据,其中数字格式化是一项常用且强大的功能。这部分主要讲解了如何利用特定的格式元素来控制数字的显示形式。 - *...
### Oracle SQL 函数小结 Oracle数据库作为一款广泛使用的数据库管理系统,在进行数据处理与分析时提供了丰富的内置函数,这些函数可以极大地简化SQL查询的编写工作,并提高查询效率。本文将根据给定的内容对Oracle...
本篇文章将深入探讨Oracle中的基本函数以及常用SQL查询,以帮助初学者快速入门,并为日常使用提供参考。 一、Oracle基本函数 1. **字符串函数**: - `CONCAT()`:连接两个或多个字符串。 - `SUBSTR()`:从字符串...
Oracle数据库系统内建了大量的内置函数,这些函数极大地丰富了SQL语言的功能,使得数据处理更加灵活和高效。本文主要围绕Oracle 8i版本的内置函数进行详细介绍,包括数字格式元素和日期格式元素。 **数字格式元素**...
Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和丰富的内置函数库是其核心优势之一。本文将深入探讨Oracle内建函数,旨在帮助用户更好地理解和利用这些功能来优化数据库操作。 1. **数学函数** -...
根据提供的文件信息,我们可以深入探讨Oracle数据库中的各种实用函数及其应用。这些函数广泛应用于数据处理、文本操作等方面,是进行高效数据库查询与管理的重要工具。 ### 1. UNION 和 UNION ALL - **UNION**: ...
根据提供的文档信息,本文将详细解释Oracle数据库中的日期时间函数,并通过具体的例子来展示这些函数的应用场景。 ### Oracle日期时间函数概述 Oracle提供了丰富的日期时间处理功能,这使得开发人员能够方便地处理...
在SQL Server中,可以使用`MAX()`和`MIN()`函数找出集合中的最大值和最小值,如`SELECT MAX(value) value FROM (SELECT 1 value UNION SELECT -2 value UNION SELECT 4 value UNION SELECT 3 value) a`。Oracle则...