drop table t1
drop table t2
create table t1(id int primary key,nickname varchar(20),playNum varchar(20))
create table t2(id int primary key,nickname varchar(20),playNum varchar(20))
insert into t1 values(1,1,10)
insert into t1 values(2,2,20)
insert into t1 values(3,3,30)
insert into t2 values(1,1,10)
insert into t2 values(2,2,200)
insert into t2 values(3,33,300)
commit
union和union all的区别是union all则将所有的结果全部显示出来,不管是不是重复。
Union:对两个结果集进行并集 *** 作,不包括重复行,同时进行默认规则的排序;
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION
union All:对两个结果集进行并集 *** 作,包括重复行,不进行排序;
如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
Intersect:对两个结果集进行交集 *** 作,不包括重复行,同时进行默认规则的排序;
Minus:对两个结果集进行差 *** 作,不包括重复行,同时进行默认规则的排序。
可以在最后一个结果集中指定Order by子句改变排序方式。
例如:
select employee_id,job_id from employees union select employee_id,job_id from job_history
以上将两个表的结果联合在一起。这两个例子会将两个select语句的结果中的重复值进行压缩,也就是结果的数据并不是两条结果的条数的和。如果希望即使重复的结果显示出来可以使用union all,例如:
2.在oracle的scott用户中有表emp select * from emp where deptno >= 20 union all select * from emp where deptno <= 30 这里的结果就有很多重复值了。
有关union和union all关键字需要注意的问题是:
union 和 union all都可以将多个结果集合并,而不仅仅是两个,你可以将多个结果集串起来。 使用union和union all必须保证各个select 集合的结果有相同个数的列,并且每个列的类型是一样的。但列名则不一定需要相同,oracle会将第一个结果的列名作为结果集的列名。例如下面是一个例子: select empno,ename from emp union select deptno,dname from dept 没有必要在每一个select结果集中使用order by子句来进行排序,可以在最后使用一条order by来对整个结果进行排序。例如: select empno,ename from emp union select deptno,dname from dept
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)