MySQL教程 MySQL教程MySQL 连接MySQL 查看数据库MySQL 创建数据库MySQL 修改数据库MySQL 删除数据库MySQL 选择数据库MySQL 数据类型MySQL存储引擎MySQL 数据表的增删改查MySQL 表数据增删改查操作MySQL 条件子句MySQL 清空表记录MySQL 模糊查询MySQL 处理重复数据MySQL 别名MySQL 限制查询结果数量Mysql 查询结果排序MySQL 范围查询MySQL 空值查询MySQL 查询结果合拼MySQL 分组MySQL 筛选分组MySQL 表连接MySQL NULL值处理MySQL 子查询MySQL 正则表达式MySQL 视图MySQL 索引MySQL 事务MySQL 数据库备份(导出)/还原(导入)MySQL安装 MySQL Windows版下载教程MySQL windows系统安装教程MySQL windows系统简单的安装教程MySQL Linux系统安装教程MySQL Linux系统下载教程MySQL Linux系统简单的安装教程配置MySQL环境变量

MySQL 查询结果合拼

MySQL数据库的UNION语句是一种用于合并两个或多个SELECT语句结果集的强大工具。它返回一个结果集,其中包含所有输入查询的唯一行。不允许查询结果列数不同

一、UNION语法

UNION语法的基本形式如下:

SELECT column_name(s) FROM table1  
UNION  [ALL | DISTINCT]
SELECT column_name(s) FROM table2;

在上述语法中,table1和table2是你要从中检索数据的表的名称,column_name(s)是你希望在结果集中包含的列的名称,可以是相同的列名,也可以是不同的列名。ALL和DISTINCT都是可选。使用UNION时,默认使用DISTINCT下会返回所有行的唯一集合。如果两个查询返回的行中有相同的值,则只会返回一次该行。ALL :返回所有结果集,包含重复数据。

二、UNION案例

假设我们有两个表,一个是博客表(blog),另一个是社区表(community)。这两个表都有"title"和"content"的列。我们想要获取所有标题和内容。


获取案例新建表格和插入数据语句


-- ----------------------------
-- Table structure for blog
-- ----------------------------
DROP TABLE IF EXISTS `blog`;
CREATE TABLE `blog` (
  `id` int(8) DEFAULT NULL,
  `user` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `content` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 
-- ----------------------------
-- Records of blog
-- ----------------------------
INSERT INTO `blog` VALUES ('1', 'John', 'php博客文章1', 'php博客文章内容1');
INSERT INTO `blog` VALUES ('2', 'David', 'php博客文章2', 'php博客文章内容2');
INSERT INTO `blog` VALUES ('3', 'David', 'HTML博客文章', 'HTML博客内容');
 
-- ----------------------------
-- Table structure for community
-- ----------------------------
DROP TABLE IF EXISTS `community`;
CREATE TABLE `community` (
  `id` int(8) DEFAULT NULL,
  `users` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `content` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 
-- ----------------------------
-- Records of community
-- ----------------------------
INSERT INTO `community` VALUES ('3', 'Emily', 'HTML社区文章', 'HTML社区文章内容');
INSERT INTO `community` VALUES ('4', 'David', 'HTML社区文章2', 'HTML社区文章内容2');
INSERT INTO `community` VALUES ('5', 'banana', 'CSS社区文章', 'CSS社区文章内容');



博客表原始数据:

mysql> select * from blog;
+------+-------+------------------+------------------------+
| id   | user  | title            | content                |
+------+-------+------------------+------------------------+
|    1 | John  | php博客文章1     | php博客文章内容1       |
|    2 | David | php博客文章2     | php博客文章内容2       |
|    3 | David | HTML博客文章     | HTML博客内容           |
+------+-------+------------------+------------------------+

社区表原始数据:

mysql> select * from community;
+------+--------+-------------------+-------------------------+
| id   | users    | title             | content                 |
+------+--------+-------------------+-------------------------+
|    3 | Emily  | HTML社区文章      | HTML社区文章内容        |
|    4 | David  | HTML社区文章2     | HTML社区文章内容2       |
|    5 | banana | CSS社区文章       | CSS社区文章内容         |
+------+--------+-------------------+-------------------------+

我们可以使用UNION语句来合并这两个表的结果,如下所示:

mysql> SELECT title,content FROM blog
    -> UNION
    -> SELECT title,content FROM community;
+-------------------+-------------------------+
| title             | content                 |
+-------------------+-------------------------+
| php博客文章1      | php博客文章内容1        |
| php博客文章2      | php博客文章内容2        |
| HTML博客文章      | HTML博客内容            |
| HTML社区文章      | HTML社区文章内容        |
| HTML社区文章2     | HTML社区文章内容2       |
| CSS社区文章       | CSS社区文章内容         |
+-------------------+-------------------------+

这将返回一个包含所有标题和内容的结果集。

使用where条件UNION案例

mysql>  SELECT id,user FROM blog
    ->  UNION
    -> SELECT id,users FROM community where users like '%Em%';
+------+-------+
| id   | user  |
+------+-------+
|    1 | John  |
|    2 | David |
|    3 | David |
|    3 | Emily |
+------+-------+

不相同列名UNION案例

两张表用于记录用户名的字段名称不一样分别是"user","use"。以第一张表的user为列表。

mysql> SELECT user FROM blog
    -> UNION
    -> SELECT users FROM community;
+--------+
| user   |
+--------+
| John   |
| David  |
| Emily  |
| banana |
+--------+

包含重复数据UNION ALL案例

mysql> SELECT user FROM blog
    -> UNION all
    -> SELECT users FROM community;
+--------+
| user   |
+--------+
| John   |
| David  |
| David  |
| Emily  |
| David  |
| banana |
+--------+

这把重复的数据都显示出来。

三、注意事项

在使用UNION语句时,有几个注意事项需要考虑: