文档章节

MySQL UNION && UNION ALL

秋风醉了
 秋风醉了
发布于 2015/07/08 19:59
字数 714
阅读 70
收藏 0

MySQL UNION && UNION ALL

http://blog.itpub.net/29254281/viewspace-1190027/

http://my.oschina.net/xinxingegeya/blog/225646

建立如下表,

drop table test;
create table test(
id int not null auto_increment,
nickname varchar(20),
playNum varchar(20),
type int not null,
primary key (id)
);
insert into test(nickname,playNum,type) values('hello world',10,1);
insert into test(nickname,playNum,type) values('hello world',10,2);
insert into test(nickname,playNum,type) values('hello world',10,3);
insert into test(nickname,playNum,type) values('hello world',10,4);
insert into test(nickname,playNum,type) values('hello world',10,5);
insert into test(nickname,playNum,type) values('hello world',20,6);

type 分别为偶数 或 奇数 的查询结构,

mysql> select distinct nickname , playNum   from test where type % 2 = 0;
+-------------+---------+
| nickname    | playNum |
+-------------+---------+
| hello world | 10      |
| hello world | 20      |
+-------------+---------+
2 rows in set (0.00 sec)

mysql> select distinct nickname , playNum   from test where type % 2 != 0;
+-------------+---------+
| nickname    | playNum |
+-------------+---------+
| hello world | 10      |
+-------------+---------+
1 row in set (0.00 sec)

这两个查询结果的交集为 ,使用如下sql 查询,

select nickname ,playNum ,count(*) 
 from (select nickname , playNum from test where type % 2 = 0 union all select nickname , playNum from test where type % 2 != 0) temp 
 group by nickname , playNum having count(*) >1;

如下查询结果,

mysql> select nickname ,playNum ,count(*)  from (select nickname , playNum from test where type % 2 = 0 union all select nickname , playNum from test where type % 2 != 0) temp  group by nickname , pla
yNum having count(*) >1;
+-------------+---------+----------+
| nickname    | playNum | count(*) |
+-------------+---------+----------+
| hello world | 10      |        5 |
+-------------+---------+----------+
1 row in set (0.00 sec)

 

UNION 和 UNION ALL的区别

UNION属于集合运算符(set operator)允许我们把多个表表达式组合到一个复合表表达式中,它把一个表表达式的结果放在另一个表表达式的下面。

在mysql数据库中提供了UNION和UNION ALL关键字,列于每个SELECT语句的对应位置的被选择的列应具有相同的类型。

在第一个SELECT语句中被使用的列名称也被用于结果的列名称。

如果UNION不使用关键词ALL,则所有返回的行都是唯一的,如同已经对整个结果集合使用了DISTINCT。

如果指定了ALL,则会从所有用过的SELECT语句中得到所有匹配的行。DISTINCT关键词是一个自选词,不起任何作用,但是根据SQL标准的要求,在语法中允许采用。也可以在同一查询中混合UNION ALL和UNION DISTINCT。被混合的UNION类型按照这样的方式对待,即DISTICT共用体覆盖位于其左边的所有ALL共用体。DISTINCT共用体可以使用UNION DISTINCT明确地生成,或使用UNION(后面不加DISTINCT或ALL关键词)隐含地生成。

还是如上面的表,union 查询和union all查询的区别,

mysql> select nickname , playNum from test where type % 2 = 0 union all select nickname , playNum from test where type % 2 != 0;
+-------------+---------+
| nickname    | playNum |
+-------------+---------+
| hello world | 10      |
| hello world | 10      |
| hello world | 20      |
| hello world | 10      |
| hello world | 10      |
| hello world | 10      |
+-------------+---------+
6 rows in set (0.00 sec)

mysql> select nickname , playNum from test where type % 2 = 0 union select nickname , playNum from test where type % 2 != 0;
+-------------+---------+
| nickname    | playNum |
+-------------+---------+
| hello world | 10      |
| hello world | 20      |
+-------------+---------+
2 rows in set (0.00 sec)

=============END=============

© 著作权归作者所有

秋风醉了
粉丝 252
博文 532
码字总数 405690
作品 0
朝阳
程序员
私信 提问
MySQL UNION

在本教程中,我们将学习如何使用MySQL UNION操作符从多个SELECT语句将两个或多个结果集组合成一个结果集。 MySQL UNION操作符 MySQL UNION运算符允许您从多个表查询出来的两个或多个结果集组...

易百教程
2016/09/14
29
0
继续测试博客

1. 背景 全并查询结果是将多个 select 语句的查询结果合并到一起。 参与合并的结果集需要字段统一。 * 字段可以用空字符串''代替。 2. 合并查询结果实战 [ users1 and users2 ] * 查看 user...

zhangguis
2017/07/10
0
0
继续测试博客

1. 背景 全并查询结果是将多个 select 语句的查询结果合并到一起。 参与合并的结果集需要字段统一。 * 字段可以用空字符串''代替。 2. 合并查询结果实战 [ users1 and users2 ] * 查看 user...

zhangguis
2017/07/10
0
0
继续测试博客

1. 背景 全并查询结果是将多个 select 语句的查询结果合并到一起。 参与合并的结果集需要字段统一。 * 字段可以用空字符串''代替。 2. 合并查询结果实战 [ users1 and users2 ] * 查看 user...

zhangguis
2017/07/10
0
0
MySQL中UNION和UNION ALL 详见

在MYSQL数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。 MySQL中的UNION ,UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会...

mn_1127
2013/12/10
260
0

没有更多内容

加载失败,请刷新页面

加载更多

c++运算符重载

这个运算符重载觉得有点像java的装箱 #ifndef INTERGER_H #define INTERGER_H //学习下运算符的重载 class Interger { public: Interger(); Interger(int value):m_value(value){}......

南桥北木
26分钟前
4
0
微信公众号如何推送文章

公众号推送消息格式,可以推送文本、图文消息、小程序、优惠券、会员卡、图片、视频、语音,不仅仅只能推送文章即图文消息,支持素材永久链接,表情符号等。 通过公众号接口可以开发各种各样...

保持美好
27分钟前
4
0
云桌面经常被吐槽,为什么还有很多人在用

说起云桌面我们会发现一个很奇怪的现象,那就是我们在网上经常能看到有人在吐槽云桌面的,说云桌面的性能差、价格贵和各种的不好用。虽然说网上有很多人都在吐槽云桌面,但是我们会发现使用它...

GZASD
34分钟前
5
0
支付宝20积分兑换15天会员

支付宝20积分兑换30天会员 活动地址:https://openact.ximalaya.com/alipay-vip/#/(或支付宝扫码打开)

xiaogg
37分钟前
6
0
DDoS攻击是怎么打垮游戏企业的?

1.占用服务器的有限资源。比如TCP连接数资源(服务器的连接数是有限制的),有的TCP连接会断开,有的会保持通信;比如一家餐馆,攻击者打比方是地痞流氓总是去排队,但是并不去消费,那么此时正...

云漫网络Ruan
38分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部