MySQL 多表关联 ——JOIN 查询详解
一、多表关系基础
常见多表关系:
一对一:如用户表(user)和用户详情表(user_detail);
一对多:如用户表(user)和订单表(order_info)(一个用户多个订单);
多对多:如商品表(goods)和订单表(order_info)(需中间表 order_goods)。
二、JOIN 查询类型
| 类型 | 作用 |
|---|---|
| INNER JOIN | 内连接:只返回两表匹配的记录 |
| LEFT JOIN | 左连接:返回左表所有记录,右表匹配的记录(无则 NULL) |
| RIGHT JOIN | 右连接:返回右表所有记录,左表匹配的记录(无则 NULL) |
三、实战示例
先创建订单表并插入测试数据:
1. 内连接(INNER JOIN)
查询有订单的用户信息和订单号:
结果仅返回有订单的用户(id=1、2)。
2. 左连接(LEFT JOIN)
查询所有用户,包括无订单的用户:
结果返回所有用户,无订单的用户订单字段为 NULL。
3. 右连接(RIGHT JOIN)
结果返回所有订单,若订单关联的用户不存在(实际不会,有外键约束),用户字段为 NULL。
总结
JOIN 查询核心是通过关联字段(如 user.id = order_info.user_id)连接多表;
内连接只返回匹配记录,左连接返回左表所有记录,右连接返回右表所有记录;
实际开发中左连接使用最多,需注意关联字段索引优化。