大家好,我是第八哥。在日常开发中,我们经常会遇到需要从多个表中取数据的情况,这时候MySQL的联合查询就派上用场了。
联合查询的核心是把不同表的数据整合在一起,减少多次查询,提升效率。但很多人用的时候不是顺序写乱,就是性能掉坑。今天我就结合实战,带你完整掌握 MySQL 的 JOIN 和 UNION。
什么是联合查询
所谓联合查询,就是通过关键字把多个表的数据结合起来,常见方式有 JOIN(连接查询)和 UNION(结果合并)。JOIN 主要是横向整合表之间的关系,UNION 则是纵向叠加查询结果。
JOIN 的几种常见用法
INNER JOIN:只返回两个表中匹配的数据。
LEFT JOIN:返回左表所有数据,右表匹配不到的补 NULL。
RIGHT JOIN:反过来,返回右表所有数据。
FULL JOIN:MySQL 本身不支持,但可以通过 UNION 模拟。
SELECT u.id, u.name, o.order_no
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
这段 SQL 就是查出所有有订单的用户及订单号。
UNION 的使用场景
有时候我们要把两张结构相同的表数据合并成一个结果集,就会用到 UNION。默认 UNION 会去重,如果想保留重复数据,可以用 UNION ALL。
SELECT name, email FROM users_2024
UNION ALL
SELECT name, email FROM users_2025;
这种写法能把不同年份的用户表进行合并查询,非常高效。
实战技巧与注意事项
第一,保证字段类型一致。不论是 JOIN 还是 UNION,字段类型不兼容都会报错。
第二,索引优化。在 JOIN 的关联字段上加索引,可以大大提升查询速度。
第三,控制结果集大小。不要贪图一次查太多,可以配合 LIMIT 分页。
JOIN 与 UNION 的优缺点
JOIN 优点是灵活,可以按关系精准取数,但多表 JOIN 过多时性能可能下降。
UNION 优点是简单粗暴,特别适合表结构相同的情况,但去重操作会额外消耗资源。
性能调优经验
我常用的一个方法是先用 EXPLAIN
查看 SQL 的执行计划。如果发现 JOIN 走了全表扫描,那一定要检查索引是否建对。对于 UNION 查询,能用 UNION ALL 就尽量别用 UNION,避免不必要的去重计算。
总结
MySQL 的联合查询其实并不难,核心是理解 JOIN 用来横向整合,UNION 用来纵向合并。只要掌握执行顺序、优化索引和注意字段类型,就能避免大多数坑,写出既高效又稳定的查询语句。
评论