在MySQL中,多表连接是指通过关联条件把两张或多张表的数据组合在一起查询。常见的连接类型有内连接、左外连接和右外连接,合理使用它们可以解决绝大多数跨表查询需求。

一、内连接(INNER JOIN)
内连接只返回两个表中满足连接条件的记录。语法如下:
-- 查询用户及其对应的订单信息 SELECT u.id, u.name, o.order_no, o.amount FROM user u INNER JOIN orders o ON u.id = o.user_id;
如果某用户没有订单,或者某订单没有对应用户,这条记录就不会出现在结果中。
二、左连接(LEFT JOIN)
左连接以左表为主,返回左表所有记录,右表没有匹配时填充为NULL。常用于需要保留主表全部数据的场景。
-- 查询所有用户以及他们的订单,没有订单的用户也显示 SELECT u.id, u.name, o.order_no FROM user u LEFT JOIN orders o ON u.id = o.user_id;
三、右连接(RIGHT JOIN)
右连接与左连接相反,以右表为主。实际开发中左连接使用更多,右连接可通过调换表顺序改写为左连接。
-- 查询所有订单及下单用户,包含无用户信息的订单 SELECT u.name, o.order_no, o.amount FROM user u RIGHT JOIN orders o ON u.id = o.user_id;
四、多表连接示例
当涉及三张表时,可以连续使用JOIN。例如文章表关联用户表和分类表:
SELECT a.title, u.name AS author, c.cat_name FROM article a LEFT JOIN user u ON a.user_id = u.id LEFT JOIN category c ON a.cat_id = c.id;
五、连接注意事项
- 连接字段最好建立索引,提升查询性能
- 明确写出ON条件,避免产生笛卡尔积
- 使用表别名简化SQL,增强可读性
多表连接的核心在于找准表之间的关联关系,并在ON子句中正确描述这种关系。
通过上述几种写法,基本可以覆盖日常MySQL多表查询的需要。在复杂报表中,还可以结合WHERE、GROUP BY等子句进一步处理连接后的结果集。