您的位置:首页 > 数据库 > Oracle

oracle中 unino,union all,minus,intersect的用法

2014-04-26 13:20 274 查看

1.准备测试数据

准备测试表:test_minus_tbl
create table test_minus_tbl(
id varchar2(20),
name varchar2(50),
age int
);

alter table test_minus_tbl add constraint pk_minus_tbl primary key(id);

create sequence seq_test_minus_tbl increment by 1 start with 1 maxvalue 99999999 minvalue 1 nocycle nocache;
准备测试数据
insert into test_minus_tbl(id, name, age)values(seq_test_minus_tbl.nextval, 'lxl', 26);
insert into test_minus_tbl(id, name, age)values(seq_test_minus_tbl.nextval, 'lxl', 26);
insert into test_minus_tbl(id, name, age)values(seq_test_minus_tbl.nextval, 'lxl_01', 26);
insert into test_minus_tbl(id, name, age)values(seq_test_minus_tbl.nextval, 'lxl_02', 26);
insert into test_minus_tbl(id, name, age)values(seq_test_minus_tbl.nextval, 'lxl_01', 26);
insert into test_minus_tbl(id, name, age)values(seq_test_minus_tbl.nextval, 'lxl_02', 26);

2.进行测试

先进行查询全部:
select * from test_minus_tbl;




在介绍union,union all,minus,intersect,之前,必须要明确:参与的结果集必须要有相同的列数,并且类型要相同

minus的作用及用法,两个结果集相减

结果集去掉 name 字段 值为 lxl 的记录,并去重:
select t.name
from test_minus_tbl t
minus
select t1.name from test_minus_tbl t1 where t1.name = 'lxl';
结果如下图



union all的作用及用法,两个结果集合并,不去重

select t.name
from test_minus_tbl t
union all
select t1.name from test_minus_tbl t1;
结果如下图



union的作用及用法,两个结果集合并,并且去掉重复的记录,让重复的记录只显示一条

select t.name
from test_minus_tbl t
union
select t1.name from test_minus_tbl t1;
结果如下图



intersect的作用及用法,求交集

select t.name
from test_minus_tbl t
intersect
select t1.name from test_minus_tbl t1 where t1.name = 'lxl';
结果如下图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息