`
xinyoulinglei
  • 浏览: 123631 次
社区版块
存档分类
最新评论

oracle结果集的操作信息

阅读更多
众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一些问题,记录备考。

假设我们有一个表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都有效。

注意:

1,Union可以对字段名不同但数据类型相同的结果集进行合并;

2,如果字段名不同的结果集进行Union,那么对此字段的Order by子句将失效。

=================================================================================================================

Intersect和Minus的操作和Union基本一致,这里一起总结一下:

Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

Union All,对两个结果集进行并集操作,包括重复行,不进行排序;

Intersect,对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;

Minus,对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。

可以在最后一个结果集中指定Order by子句改变排序方式。
分享到:
评论

相关推荐

    oracle 字符集乱码解决

    由于历史的原因,早期的oracle...而在SELECT的过程中,Oracle同样检查发现数据库与客户端的字符集设置是相同的,所以它也将存入的内容原封不动地传送到客户端,而客户端操作系统识别出这是汉字编码所以能够正确显示。

    修改oracle字符集

    文档详细的介绍了如何实现ORACLE数据库字符集的修改操作。

    Oracle应用操作全集

    Oracle的一些应用操作、ps/slq、sql优化==

    linux 下oracle中文乱码字符集设置

    linux 下的 oracle 导入数据库时出现中文乱码,通过修改字符集格式,修改成支持中文的格式。简单易操作。

    如何修改oracle数据库字符集

    修改oracle数据库字符集详细的操作命令

    oracle11g更改字符集

    oracle11g导入报错,很多情况下是字符集不同导致失败,附件为oracle11g更改字符集操作说明,多次实测有效。

    Oracle数据库实验操作

    实验27:查询结果的集合操作 63 实验28:高级分组rollup,cube操作 65 实验29:树结构的查询start with子句 66 实验30:高级dml操作 68 第二部分pl/sql基础 69 匿名块的编写 69 实验31:书写一个最简单的块,运行并...

    oracle11g字符集修改

    oracle11g字符集的修改,本人亲自用过,按照文档内容一步一步操作准没错,不要忘了先将数据备份或导出pdm哦!!!O(∩_∩)O哈哈~

    北大青鸟Oracle教程集1

    创建数据库时, – 存储数据库的物理结构 – 还包括关于数据库的信息 数据库的名称 数据文件和恢复日志文件的名称及其位置 时间戳 物理组件 4-4 恢复日志文件: 恢复日志文件: – 恢复日志文件是操作系统文件集,由 ...

    北大青鸟Oracle教程集2

    创建数据库时, – 存储数据库的物理结构 – 还包括关于数据库的信息 数据库的名称 数据文件和恢复日志文件的名称及其位置 时间戳 物理组件 4-4 恢复日志文件: 恢复日志文件: – 恢复日志文件是操作系统文件集,由 ...

    Oracle.DataAccess.dll x64 x86 批量操作

    批量操作插入oracle数据集的Oracle.DataAccess.dll,区分x64与x86 各种版本

    oracle修改字符集

    4.修改Oracle的编码和操作系统的一样。(参考别人的) 登陆用dba SQL&gt; conn system/hundsun as sysdba; 停掉数据库 SQL&gt;shutdown immediate; 启动数据库到mount状态下 SQL&gt; STARTUP MOUNT; Java代码 ...

    Oracle全集,从入门到熟练

    Oracle全集,oralle优化,Oracle操作语法,触发器和内置包等等。。(很全,附实例)

    Oracle字符集修改

    修改字符集的时候需要修改的彻底,否则会导致表以及其他资源没办法正常使用,按照文档上描述一步步操作就可以了,这个我自己尝试过了,我自己用的是linux oracle64位R2版本的

    Oracle 基本建表语句集

    oracle数据库sql语句操作,基本oracle数据库sql语句集合

    MySql转换成Oracle工具

    支持所有版本的Mysql字符集 对超大数据表的导出进行了优化处理 Convert Mysql to Oracle 功能限制 不能转换MYSQL的存储过程 Convert Mysql to Oracle 运行需求 有相应的数据库操作权限 在机器中安装了ORACLE...

    JDBC连接操作Oracle及Mysql详解

    JDBC连接Oracle 11g及Mysql5,涉及传参,反射,读取属性文件,预处理,(预处理)批处理,带参数的存储过程,事务处理,可滚动的结果集,可更新的结果集

    Oracle数据库学习指南

    40.在oracle中限制返回结果集的大小 41.在远端如何建立standby数据库 42.怎样分析你的SQL语句的效率 43.自动备份Oracle数据库 44.总结SQL语句中的优化提示 45.使用Database Configuration Assistant安装...

    oracle 命令全集

    文档中收集了oracle系统大部分常用的操作命令,需要的人可下载下来多练习几次,进一步熟悉oracle系统。

    ORACLE常见问题整理

    oracle数据库的备份还原等操作的描述; 修改oracle数据库字符集

Global site tag (gtag.js) - Google Analytics