组合查询中union 与union all的区别

       在SQL中所提供的几种运算符允许组合多个SQL查询来实现,如union、union all、intersect和difference。 在使用这些运算符时,从一个表中获取的数据必须和其他表中的数据具有相同的列数目,同时两个表中相对应的列必须具有相同的数据类型或者至少两个数据类型之间必须存在可能的隐形数据转化,或者是显式转化。为了能更好的理解这些运算符,主要区别一下union和union all 两者之间关系。

        通常情况下,union(即联合)的结果集列名与union 运算符中第一个select  语句的结果集中的列名相同,另一个select语句的结果集列名被忽略了。如在两个表professor表和student表中,我们运行下列命令:

select professorid,pro_name from professor union select studentid,stu_name from student

其结果集为:

professorid  pro_name

1 pro.dawson
1 李学思
2 pro.williams
2 张峰
3 pro.ashby
3 王俊
4 pro.patel
4 郝眼
5 pro.jones
5 李俊平
6 pro.hwa
6 林俊杰
7 吴丽丽
8 陈丽君
9 欧阳海
10 孙胜利
11 吴文杰
12 勾西平
23 hhg

       虽然上面的举例很直观,但是在集合理论中,两个数据集联合后包括包含每个数据的每个成员,但是每个成员只被计数一次。

{1,2,3,4} union {3,4,5,6},其结果为:{1,2,3,4,5,6}

       与之相不同的union all 则是保留重复行,换句话讲,此运算符返回每个数据集的所有成员,而不考虑重复。比如:同样在两个表professor表和student表中,我们运行下列命令:

select professorid,pro_name from professor union  all select studentid,stu_name from student

其结果集为:

professorid  pro_name

1 pro.dawson
2 pro.williams
3 pro.ashby
4 pro.patel
5 pro.jones
6 pro.hwa
1 李学思
2 张峰
3 王俊
4 郝眼
5 李俊平
6 林俊杰
7 吴丽丽
8 陈丽君
9 欧阳海
10 孙胜利
11 吴文杰
12 勾西平
23 hhg

       更直观的比方说{1,2,3,4} union all {3,4,5,6} ,其结果为:{1,2,3,3,4,4,5,6}

       简单的提示一下,sql中的intersect运算符允许仅返回在两个查询都出现的行,相当于数学上所学的交集。






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值