union(联合) 和union all
作 用:union(联合) 和union all的作用是将多个结果合并在一起显示出来,如果我们需要将两个select语句的结果作为一个整体显示出来,我们就可以使用这两个关键字。
区 别:union会自动压缩多个结果集合中的重复结果,同时进行默认规则的排序;而union all则将所有的结果全部显示出来,包括重复行,并且不进行排序。所以,在执行效率上,union all > union ,在以后的应用中,如果 没有强烈要求查询结果不可重复,建议读者使用union all。提到效率方面,在做多条件查询时,使用union替代or也会提高查询效率。
注意点:使用union和union all必须保证各个select 集合的结果有相同个数的列,并且每个列的类型是一样的。但列名则不一定需要 相同,oracle会将第一个结果的列名作为结果集的列名。
示 例:
//创建表1
create table stu1_tb(
name varchar2(10), //姓名
sex number //性别
);
//stu1_tb插入数据
insert into stu1_tb (name,sex) values('jy',0);
insert into stu1_tb (name,sex) values('yt',1);
insert into stu1_tb (name,sex) values('lj',1);
insert into stu1_tb (name,sex) values('rb',0);
insert into stu1_tb (name,sex) values('lqk',0);
` union查询
select * from stu1_tb where sex = 0 or name = 'yt'
union
select * from stu1_tb where sex = 1
//执行结果
//union all查询
select * from stu1_tb where sex = 0 or name = ‘yt’
union all
select * from stu1_tb where sex = 1
//执行结果
minus(差集)
作 用:它先查询出SQL1语句所产生的结果集,然后看这些结果中有没有SQL2语句查询的结果。如果有的话,在SQL1语句所产生的结果集中删除这些结果。也就是说,minus最后生成的结果集是:sql1结果集 - sql2结果集与sql1结果集相同的结果。
注意点:sql2结果集中未包含在sql1结果集中的数据也同样会被舍弃。
示 例:
//minus查询
select * from stu1_tb where (sex = 0 ) or name = 'yt'
minus
select * from stu1_tb where sex = 1
//执行结果
INTERSECT(交集)
作 用:查询既包含在sql1结果集中又包含在sql2结果集中的结果。
示 例:
//intersect查询
select * from stu1_tb where (sex = 0 ) or name = 'yt'
INTERSECT
select * from stu1_tb where sex = 1
//执行结果
对于以上四个关键字,除union all 外,其余关键字在查询结果中都会根据查询结果的第一列进行升序排序。如果使用order by对结果手动排序,必须放在最后一条select之后,当列名相同时,可以直接用列名排序,如果不同可以用位置排序,也可以使用别名使其相同。