> 데이터 베이스 > MySQL 튜토리얼 > SET操作符(UNION/UNIONALL/INTERSECT/MINUS)

SET操作符(UNION/UNIONALL/INTERSECT/MINUS)

WBOY
풀어 주다: 2016-06-07 16:09:52
원래의
1220명이 탐색했습니다.

Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All 两个要联合的SQL语句 字段个数必须一样,而且字段类型要相容(一致); 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union

Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All

两个要联合的SQL语句 字段个数必须一样,而且字段类型要“相容”(一致);

如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。

union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。


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

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

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

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


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

例如:
建两张表:s1,s2
create table s1
(
id number(10),
name varchar2(20),
age number(10)
)

create table s2
(
id number(10),
name varchar2(20),
age number(10)
)

插入数据:
insert into s1 values(1,'刘备',51);
insert into s1 values(1,'刘德华',54);
insert into s1 values(3,' 张学友',54);
insert into s1 values(4,'黎明',54);

insert into s2 values(1,'刘备',51);
insert into s2 values(3,' 张飞',52);
insert into s2 values(4,'关羽',53);

1、Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
select * from s1
union
select * from s2;

得到结果集:

ID NAME AGE
1 1 刘备 51
2 1 刘德华 54
3 3 张飞 52
4 3 张学友 54
5 4 关羽 53
6 4 黎明 54

2、Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
select * from s1
union all
select * from s2;

得到结果集:

ID NAME AGE
1 1 刘备 51
2 1 刘德华 54
3 3 张学友 54
4 4 黎明 54
5 1 刘备 51
6 3 张飞 52
7 4 关羽 53

3、Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
select * from s1
Intersect
select * from s2;

得到结果集:

ID NAME AGE
1 1 刘备 51

4、Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
select * from s1
Minus
select * from s2;

得到结果集:

ID NAME AGE
1 1 刘德华 54
2 3 张学友 54
3 4 黎明 54
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿