MYSQL中UNION(联合查询)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 实际业务中,有时候需要把满足多种独立条件的结果集整合到一起,就可以使用 UNOIN 联合查询。使用 UNION 还是 UNION ALL 其中 UNION 联合查询已经去除了重复的结果集 UNION ALL 联合查询没有去除重复结果集,但是 UNION ALL查询性能要比 UNION好一些。最后还是需要根据具体业务选择使用 UNION 还是 UNION ALL。

@[TOC]

0 写在前面

实际业务中,有时候需要把满足多种独立条件的结果集整合到一起,就可以使用 UNOIN 联合查询。

1 格式

[查询一] UNOIN [查询二]……:将多条查询语句的结果合并成一个结果并去重
[查询一] UNOIN ALL [查询二]…… :将多条查询语句的结果合并成一个结果

2 SQL准备

DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `sex` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `date_birth` datetime DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

-- ----------------------------
-- Records of person
-- ----------------------------
INSERT INTO `person` VALUES ('1', '小明', '男', '21', '2001-02-02 12:29:30');
INSERT INTO `person` VALUES ('2', '小红', '女', '20', '2002-01-01 00:00:00');
INSERT INTO `person` VALUES ('3', '张三', '男', '22', '2002-01-01 00:00:01');
INSERT INTO `person` VALUES ('4', '李四', '男', '30', '1992-07-10 12:00:00');


DROP TABLE IF EXISTS `person02`;
CREATE TABLE `person02`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `sex` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `date_birth` datetime NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = COMPACT;

-- ----------------------------
-- Records of person02
-- ----------------------------
INSERT INTO `person02` VALUES (1, '小明', '男', 21, '2001-02-02 12:29:30');
INSERT INTO `person02` VALUES (2, '小红', '女', 20, '2002-01-01 00:00:00');
INSERT INTO `person02` VALUES (3, '张三', '男', 22, '2002-01-01 00:00:01');
INSERT INTO `person02` VALUES (4, '李四', '男', 30, '1992-07-10 12:00:00');

SET FOREIGN_KEY_CHECKS = 1;

在这里插入图片描述

3 代码示例

3.1 UNION ALL

查询两个表的人大于20岁的集合。
sql:

SELECT * FROM person WHERE age >20
UNION ALL
SELECT * FROM person02 WHERE age > 20;

查询结果:
在这里插入图片描述
这样的结果有一点问题,有相同的数据。

3.2 UNION

同样的查询条件:
sql:

SELECT * FROM person WHERE age >20
UNION 
SELECT * FROM person02 WHERE age > 20;

查询结果:
在这里插入图片描述
可以看到使用UNION可以去重复的数据。

4 写在最后

使用 UNION 还是 UNION ALL 其中 UNION 联合查询已经去除了重复的结果集 UNION ALL 联合查询没有去除重复结果集,但是 UNION ALL查询性能要比 UNION好一些。
最后还是需要根据具体业务选择使用 UNION 还是 UNION ALL。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
22天前
|
NoSQL 安全 关系型数据库
2024Mysql And Redis基础与进阶操作系列(6)作者——LJS[含MySQL 多表之一对一/多;多对多;多表联合查询等详解步骤及常见报错问题所对应的解决方法]
MySQL 多表之一对一/多;多对多;多表联合之交叉连接;内连接;左、右、外、满、连接;子查询及关键字;自连接查询等详解步骤及常见报错问题所对应的解决方法
|
3月前
|
数据采集 SQL 关系型数据库
在 MySQL 中使用 Union
【8月更文挑战第11天】
239 0
在 MySQL 中使用 Union
|
5月前
|
Oracle 关系型数据库 MySQL
MYSQL-多表联合查询汇总
MYSQL-多表联合查询汇总
|
4月前
|
关系型数据库 MySQL 数据库
MySQL:union all与union区别详解
MySQL:union all与union区别详解
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——多表查询(3)-自连接、联合查询、子查询
MySQL数据库——多表查询(3)-自连接、联合查询、子查询
257 1
|
5月前
|
关系型数据库 MySQL 数据库
Mysql数据库联合查询
Mysql数据库联合查询
71 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL多表联合查询+分组+排序
MySQL多表联合查询+分组+排序
32 0
|
6月前
|
关系型数据库 MySQL
MySQL 的 union 和union all 的区别
【5月更文挑战第4天】MySQL 的 union 和union all 的区别
174 7
|
6月前
|
SQL 关系型数据库 MySQL
MySQL第三战:CRUD,函数1以及union&union all
MySQL第三战:CRUD,函数1以及union&union all
|
6月前
|
关系型数据库 MySQL
MySQL union和union all的用法详解和区别
MySQL union和union all的用法详解和区别
344 0