在MySQL数据库中,多表连接查询是把两张或多张表按照某种关联条件组合在一起取出数据的方式。实际业务里用户表、订单表、商品表往往分开存储,只有用连接查询才能一次性拿到完整信息。

一、常见的连接类型
MySQL里最常用的连接包括内连接和外连接。内连接只保留两表都满足关联条件的记录,外连接还会保留主表中没有匹配到的记录。
1. 内连接 inner join
内连接使用 inner_join 或简写 join,只会返回两边都能对上的数据。
-- 查询每个用户及其对应的订单 select u.user_id, u.username, o.order_id, o.amount from user u inner join order_table o on u.user_id = o.user_id;
2. 左连接 left join
左连接以左表为主,右表无匹配时字段为 null。
-- 查询所有用户,以及他们的订单(没有订单也为空) select u.user_id, u.username, o.order_id from user u left join order_table o on u.user_id = o.user_id;
二、on 和 where 的区别
在使用外连接时,过滤条件写在 on 还是 where 会影响结果。on 是在连接时生效,where 是在连接完之后过滤。
| 位置 | 作用阶段 | 左连接中的表现 |
|---|---|---|
| on | 连接过程中 | 右表不匹配也保留左表记录 |
| where | 连接完成后 | 可能过滤掉左表记录 |
三、多表连接示例
三张表关联时,可以连续使用 join 语句。
-- 用户、订单、商品三表连接 select u.username, o.order_id, p.product_name from user u left join order_table o on u.user_id = o.user_id left join product p on o.product_id = p.product_id;
四、书写建议
- 给表起简短别名,提升可读性
- 连接字段最好建立索引,如 user_id
- 先想清楚主表是谁,再选 left join 或 inner join
- 避免在 on 里写右表的非空过滤导致逻辑变 where
连接查询的核心就是搞清楚哪张表是主表,以及匹配不上的数据要不要保留。
掌握上述写法后,日常遇到的多表查询基本都能顺利解决。练习时建议用真实数据对比 inner join 和 left join 的输出差异,这样理解会更牢固。
MySQL多表连接查询inner_join修改时间:2026-07-29 18:30:19