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数据:
stafftable2数据:
使用 UNION 命令实例:列出两张表中所有的员工
代码示例:
SELECT * from stafftable1 UNION SELECT * from stafftable2
执行以上代码你会发现表stafftable2中的“赵云1”不见了,如下:
原因是UNION语法把相同的数据去掉了,如果不想去掉重复的数据请使用UNION ALL