MySQL UNION使用介绍及示例

1 用法介绍

说明
作用UNION运算符用于组合两个或更多SELECT语句的结果集
使用前提UNION中的每个SELECT语句必须具有相同的列数
1. 这些列的数据类型必须兼容:类型不必完全相同,但是必须可以隐式转换。
2. 每个SELECT语句中的列也必须以相同的顺序排列
UNION 语法SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
UNION ALL语法SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
UNION 和 UNION ALL区别union 会自动压缩多个结果集合中的重复结果,而 union all 则将所有的结果全部显示出来,不管是不是重复

2 使用示例

2.1 数据准备

  • 测试数据库表:test_onion
  • 数据库数据:
    在这里插入图片描述

2.2 查询示例

  • 假定查询需求:查找各部门男生人数和女生人数,即结果列为部门名称、男生人数、女生人数

  • 查询各部门男生人数:

SELECT
	org_name, count(user_sex) as man_num
FROM
	test_union
where user_sex = '男'
GROUP BY org_name;

在这里插入图片描述

  • 查询各部门女生人数:
SELECT
	org_name, count(user_sex) as woman_num
FROM
	test_union
where user_sex = '女'
GROUP BY org_name;

在这里插入图片描述

  • 将两次的结果整合:
SELECT
	org_name,
	man_num,
	woman_num
FROM
	(
		SELECT
			org_name,
			count(user_sex) AS man_num,
			'' AS woman_num
		FROM
			test_union
		WHERE
			user_sex = '男'
		GROUP BY
			org_name
		UNION ALL
			SELECT
				org_name,
				'' AS man_num,
				count(user_sex) AS woman_num
			FROM
				test_union
			WHERE
				user_sex = '女'
			GROUP BY
				org_name
	) c

整合结果如下:
在这里插入图片描述

但是,如上结果可以看到,两部分数据是完全拼接的,理想的结果是同一个部门的男女数据在一条查询结果上,修改后如下:

SELECT
	org_name,
	SUM(man_num) as man_num,
	SUM(woman_num) as woman_num
FROM
	(
		SELECT
			org_name,
			count(user_sex) AS man_num,
			'' AS woman_num
		FROM
			test_union
		WHERE
			user_sex = '男'
		GROUP BY
			org_name
		UNION ALL
			SELECT
				org_name,
				'' AS man_num,
				count(user_sex) AS woman_num
			FROM
				test_union
			WHERE
				user_sex = '女'
			GROUP BY
				org_name
	) c
GROUP BY org_name

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值