mysql中的联合查询命令为:UNION和UNION ALL,在此总结做为记录。

1、UNION和UNION ALL的作用和语法
UNION用户合并两个或者多个SELECT语句的结果集,并且消除表中的任何重复行,UNION内部的SElECT语句必须要求必须拥有相同的列,列也必须拥有相似的数据类型,同时,每条 SELECT 语句中的列的顺序必须相同。

UNION语法代码:
	SELECT stafftable1 FROM tab1
	UNION
	SELECT stafftable1 FROM tab2

注:UNION操作符选取不同的值,如果你的开发需求允许重复的话请适用UNION ALL。当ALL和UNION一起使用的时候,也就是UNION ALL,不消除重复行。

UNION ALL语法代码:
	SELECT stafftable1 FROM tab1
	UNION ALL
	SELECT stafftable1 FROM tab2

注:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名
2、UNION注意事项:
UNION:也就是联合查询的意思
要求:两次查询的列数必须是一致的;可以来自多张表的数据:多次sql语句取出的列名可以不一致,此时以第一个sql语句的列名为准;如果不同的语句中取出的行,有完全相同(这里表示的是每个列的值都相同),那么union会将相同的行合并,最终只保留一行。也可以这样理解,union会去掉重复的行。
如果不想去掉重复的行,可以使用union all;如果子句中有order by,limit,需用括号()包起来。推荐放到所有子句之后,即对最终合并的结果来排序或筛选。

orderby 语法代码:
(SELECT * FROM stafftable1 ORDER BY id ) UNION (SELECT * FROM stafftable2 ORDER by id)

limit 语句代码:
(SELECT * FROM stafftable1 ORDER BY id ) UNION (SELECT * FROM stafftable2 ORDER by id) LIMIT 1,5

3、学习例子:
表:stafftable1、stafftable2
建表代码如下:

CREATE TABLE `stafftable1` (
  `id` varchar(36) NOT NULL,
  `staffname` varchar(50) DEFAULT NULL COMMENT '员工姓名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `stafftable2` (
  `id` varchar(36) NOT NULL,
  `staffname` varchar(50) DEFAULT NULL COMMENT '员工姓名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

两个表中数据为:
stafftable1数据:

mysql order by union all 报错 mysql中union_联合查询


stafftable2数据:

mysql order by union all 报错 mysql中union_数据_02


使用 UNION 命令实例:列出两张表中所有的员工

代码示例:
SELECT * from stafftable1 UNION SELECT * from stafftable2

执行以上代码你会发现表stafftable2中的“赵云1”不见了,如下:

mysql order by union all 报错 mysql中union_数据_03


原因是UNION语法把相同的数据去掉了,如果不想去掉重复的数据请使用UNION ALL