数据库多表合并UNION
前言
在实际开发中,数据库经常会遇到需要将多个表的数据合并到一起进行统一查询和展示的需求。此时,MySQL提供了UNION操作符来实现多表合并查询。本文将介绍UNION的使用场景、基本语法、注意事项,并通过案例和示例代码进行说明。
一、什么情况下会用到多表合并(UNION)
- 多个结构相同或相似的表,需要将它们的数据合并展示。例如:不同地区的订单表、历史与当前数据分表等。
- 需要将不同查询结果合并成一个结果集进行统一处理或统计。
- 某些业务场景下,数据分散在多个表中,但需要一次性查询出来。
二、UNION的基本用法
UNION用于合并两个或多个SELECT语句的结果集。其基本语法如下:
SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2;
注意事项:
- 每个SELECT语句的列数和列类型必须一致。
- UNION默认会去除重复的记录,如果需要保留重复记录,可以使用UNION ALL。
三、UNION与UNION ALL的区别
- UNION:合并结果集并去除重复行。
- UNION ALL:合并结果集但不去除重复行,效率更高。
四、案例与示例代码
【案例1】合并两个地区的用户表
假设有两个表:user_beijing 和 user_shanghai,结构相同,均有id、name、age字段。现在需要查询所有用户的信息。
SELECT id, name, age FROM user_beijing
UNION
SELECT id, name, age FROM user_shanghai;
如果希望保留重复的用户(比如同名同ID),可以用UNION ALL:
SELECT id, name, age FROM user_beijing
UNION ALL
SELECT id, name, age FROM user_shanghai;
【案例2】合并不同来源的订单数据
假设有order_online和order_offline两个订单表,结构为order_id, customer, amount。查询所有订单:
SELECT order_id, customer, amount FROM order_online
UNION
SELECT order_id, customer, amount FROM order_offline;
【案例3】合并不同条件下的查询结果
有一个user表,想分别查询年龄小于18岁和大于等于18岁的用户,并合并结果:
SELECT id, name, age FROM user WHERE age < 18
UNION
SELECT id, name, age FROM user WHERE age >= 18;
五、注意事项
- 列数和类型必须一致,否则会报错。
- 可以对每个SELECT语句单独排序,但最终结果只能整体排序。
- 可以与ORDER BY、LIMIT等语句结合使用,但要加在最后一个SELECT之后。
六、总结
UNION是MySQL中非常实用的多表合并工具,能够方便地将多个查询结果合并为一个结果集。掌握其用法,可以大大提升SQL查询的灵活性和效率。
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据