MySQL连接查询用法

MySQL连接查询用法

引言

业务数据分散在用户表、订单表、商品表中,要一次性取出用户姓名加订单金额,就要用JOIN把多张表按关联字段拼起来。分清内连接和外连接,是写对多表查询的关键。

内连接 INNER JOIN

只保留两表匹配上的行:

SELECT u.name, o.amount, o.order_no
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

没有订单的用户不会出现,没有对应用户的订单也不会出现。

左连接 LEFT JOIN

以左表为主,左表全部保留,右表匹配不上补NULL:

SELECT u.name, o.amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

每个用户都列出来,没下单的用户amount显示NULL,常用于统计哪些用户没购买。

右连接 RIGHT JOIN

以右表为主,和左连接方向相反,实际项目多数统一用LEFT JOIN,可读性更好。

多表连接示例

SELECT u.name, p.title, o.amount
FROM orders o
INNER JOIN users u ON o.user_id = u.id
INNER JOIN products p ON o.product_id = p.id
WHERE o.status = 1
ORDER BY o.create_time DESC;

注意事项

  • 关联字段类型要一致,避免隐式转换导致索引失效;
  • ON写连接条件,WHERE过滤结果,别把连接条件误放WHERE导致LEFT JOIN变内连接;
  • 大表JOIN先确认关联字段有索引;
  • 多表查询用表别名,字段加别名前缀避免歧义;
  • 不建议无关联条件的多表笛卡尔积。

总结

INNER JOIN取交集,LEFT JOIN保留左表全部。写多表查询先确定以哪张表为主,连接条件放ON,过滤条件放WHERE,关联字段建索引,避免隐式转换和笛卡尔积。


emer 发布于  2026-10-18 07:32