`
helloJ
  • 浏览: 165797 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Oracle Union/Union All/Intersect/Minus区别

阅读更多

摘自:http://www.cnblogs.com/jambol/archive/2008/04/28/1174311.html

 

假设我们有一个表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集合union、union all、intersect、minus

    Oracle 集合操作是指在数据库中对数据进行集合运算的操作,包括 union、union all、intersect 和 minus 等操作。这些操作可以对数据进行合并、交叉、差异等处理,提高数据处理效率。 union 操作 Union 操作是将两...

    Oracle集合操作函数union、intersect、minus.docx

    Oracle 集合操作函数 union、intersect、minus Oracle 集合操作函数是用于合并多条 SELECT 语句的结果的函数,包括 UNION、INTERSECT、MINUS 等。这些函数可以将多个查询结果合并成一个结果集,以便进一步处理和...

    Oracle_plsql常用方法汇总

    3. UNION ALL:返回两个集合的并集,包括重复行 4. MINUS:返回第一个集合中不在第二个集合中的元素 四、日期函数 日期函数是 Oracle PL/SQL 中的一种常用的函数,用于处理日期和时间相关的操作。下面是一些常用的...

    Mastering oracle SQL

    Oracle SQL还包括联接操作,如内连接、外连接、交叉连接等,以及子查询和集合操作,如UNION、INTERSECT和MINUS。这些高级查询技术对于处理复杂的数据关系至关重要。书中会深入讨论这些主题,并给出实例来帮助读者...

    Oracle和SqlServer语法区别

    [{UNION | UNION ALL | INTERSECT |MINUS} SELECT U] [ORDER BY clause] [FOR UPDATE] ``` SqlServer: ``` SELECT select_list FROM table_source [WHERE search_condition] [GROUP BY [ALL] group_by_expression ...

    最全的oracle常用命令大全.txt

    ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle&gt;svrmgrl SVRMGR&gt;connect internal SVRMGR&gt;startup ...

    Oracle hint

    但这不适用于UPDATE和DELETE语句,也不适用于带有GROUP BY、DISTINCT、INTERSECT、MINUS或UNION的语句。 5. **RULE** - `/*+ RULE */`:指定使用基于规则的优化策略,而不是基于成本的优化策略。在较新版本的...

    Oracle函数文档

    - **高级查询**:子查询,UNION/UNION ALL合并查询结果,INTERSECT找出交集,MINUS找出差集。 5. **事务和并发控制**: - **事务管理**:COMMIT提交,ROLLBACK回滚,SAVEPOINT设置保存点。 - **锁定机制**:ROW...

    Sql Server与Oracle的区别

    - **SELECT语句**:尽管基本语法相似,但Oracle支持特定的优化提示和集合运算符如START WITH和CONNECT BY,以及INTERSECT和MINUS,这些在Sql Server中需要通过其他方式实现,比如使用EXISTS和NOT EXISTS子句。...

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

    在本培训资料的第二部分中,主要介绍了四种高级查询语句:UNION、UNION ALL、INTERSECT和MINUS,这些都是集合操作符,用于合并或比较多个SQL查询的结果。 1. **UNION** 操作符: UNION用于合并两个或更多SELECT...

    Oracle高级sql学习与练习

    1. 集合操作包括UNION、UNION ALL、INTERSECT和MINUS等,它们用于合并两个或多个SELECT语句的结果集。UNION和UNION ALL用于联合多个结果集,不同之处在于UNION ALL会将所有结果包括重复项,而UNION则会自动去除重复...

    浅谈Oracle优化排序的操作

    Oracle的排序操作通常发生在以下几种情况下:创建索引、索引维护、ORDER BY、GROUP BY、DISTINCT、UNION/INTERSECT/MINUS以及SORT-MERGE JOIN等。 **排序空间**:在进行排序时,Oracle会先尝试在`sort_area_size`...

    数据库——的集合运算

    在SQL语言中,最基本的集合运算符包括UNION、UNION ALL、INTERSECT和MINUS。每个运算符都有其特定的用途和规则: 1. UNION运算符:此运算符用于合并两个或多个SELECT语句的结果集,并且会自动去除重复的行,只保留...

    Oracle培训教材.doc

    连接两字符串可以使用||,UNION、UNION ALL、INTERSECT和MINUS则用于合并或比较多个查询的结果集。 在SQL查询中,SELECT语句是最基础的部分,用于从表中提取数据。例如,`SELECT * FROM jobs`会显示jobs表的所有列...

    第6章 Oracle_DML_高级查询.pptx

    本章将深入探讨四种主要的集合运算:UNION、UNION ALL、INTERSECT 和 MINUS,以及子查询的使用,这些都是Oracle数据库中进行高效数据检索的关键工具。 一、集合运算 1. UNION 运算符:它用于合并两个或多个SELECT...

    sql语句生成器+支持各大数据库+说明书

    SQL语句生成器的特色 支持几乎所有类型的数据库, ...联合(Union,对于Oracle 支持Union All,Minus,Intersect) 支持将SQL查询语句,替换为插入(Insert into)和更新(Update)语句  附属工具内嵌入Delphi IDE

Global site tag (gtag.js) - Google Analytics