- 联合查询含义:指将2个或2个以上的字段数量相同的查询结果,“纵向堆叠”后合并为一个结果。
1、所有单个查询结果应该具有相等的列数。 2、所有单个查询的列类型应该具有一致性(即每个查询的第n列的数据类型一致)。 3、单个查询的列名可以不同,但最终的列名是第一个查询的列名(可以使用别名)。 4、union 可以带 all 或 distinct 参数,如果省略默认就是 distinct, 即默认已经消除重复行了。 5、最后的 order by 或 limit 是对整个联合之后的结果数据进行排序或数量限定。 6、order by 子句中的排序字段应该使用第-个查询中的字段名,如果有别名就必须使用别名。
- 语法形式: 通过 union 进行联合
select * from test union (all 或 distinct(默认)) select * from user union (all 或 distinct(默认)) select ...... order by 字段 (asc || desc) limit 页码,每页条数;
- 测试数据:
``` mysql> select * from test; +----+--------+------+------+ | id | name | sex | age | +----+--------+------+------+ | 1 | name1 | 女 | 15 | | 2 | name1 | 女 | 15 | | 3 | name53 | 男 | 10 | +----+--------+------+------+
mysql> select * from user; +----+--------+------+ | id | name | age | +----+--------+------+ | 1 | name1 | 15 | | 2 | name1 | 15 | | 3 | name53 | 10 | +----+--------+------+ ```
``` * 这里报错,是因为查询的是两个表的全部数据,两个表的列数量不相等 mysql> select * from test union select * from user; ERROR 1222 (21000): The used SELECT statements have a different number of columns
- 查询对等数量字段 mysql> select id, name, age from test union select id, name, age from user; +----+--------+------+ | id | name | age | +----+--------+------+ | 1 | name1 | 15 | | 2 | name1 | 15 | | 3 | name53 | 10 | +----+--------+------+
- 测试 union all mysql> select * from user union all select * from user; +----+--------+------+ | id | name | age | +----+--------+------+ | 1 | name1 | 15 | | 2 | name1 | 15 | | 3 | name53 | 10 | | 1 | name1 | 15 | | 2 | name1 | 15 | | 3 | name53 | 10 | +----+--------+------+
- 测试 union distinct,默认就是它所以可以不用写 mysql> select * from user union select * from user; +----+--------+------+ | id | name | age | +----+--------+------+ | 1 | name1 | 15 | | 2 | name1 | 15 | | 3 | name53 | 10 | +----+--------+------+ ```