MySQL 多表关联 ——JOIN 查询详解

分类:数据库 时间:2026-02-24 浏览:1
1

一、多表关系基础

常见多表关系:

  • 一对一:如用户表(user)和用户详情表(user_detail);

  • 一对多:如用户表(user)和订单表(order_info)(一个用户多个订单);

  • 多对多:如商品表(goods)和订单表(order_info)(需中间表 order_goods)。

二、JOIN 查询类型

类型作用
INNER JOIN内连接:只返回两表匹配的记录
LEFT JOIN左连接:返回左表所有记录,右表匹配的记录(无则 NULL)
RIGHT JOIN右连接:返回右表所有记录,左表匹配的记录(无则 NULL)

三、实战示例

先创建订单表并插入测试数据:

-- 创建订单表
CREATE TABLE order_info (
    id INT PRIMARY KEY AUTO_INCREMENT,
    order_no VARCHAR(30) NOT NULL UNIQUE,
    user_id INT NOT NULL,
    amount DECIMAL(10,2) NOT NULL DEFAULT 0.00,
    FOREIGN KEY (user_id) REFERENCES user(id)
);

-- 插入订单数据
INSERT INTO order_info (order_no, user_id, amount) VALUES
('ORD20260224001', 1, 99.9),
('ORD20260224002', 1, 199.9),
('ORD20260224003', 2, 89.9);

1. 内连接(INNER JOIN)

查询有订单的用户信息和订单号:

SELECT u.username, o.order_no, o.amount
FROM user u
INNER JOIN order_info o ON u.id = o.user_id;

结果仅返回有订单的用户(id=1、2)。

2. 左连接(LEFT JOIN)

查询所有用户,包括无订单的用户:

SELECT u.username, o.order_no, o.amount
FROM user u
LEFT JOIN order_info o ON u.id = o.user_id;

结果返回所有用户,无订单的用户订单字段为 NULL。

3. 右连接(RIGHT JOIN)

SELECT u.username, o.order_no, o.amount
FROM user u
RIGHT JOIN order_info o ON u.id = o.user_id;

结果返回所有订单,若订单关联的用户不存在(实际不会,有外键约束),用户字段为 NULL。

总结

  1. JOIN 查询核心是通过关联字段(如 user.id = order_info.user_id)连接多表;

  2. 内连接只返回匹配记录,左连接返回左表所有记录,右连接返回右表所有记录;

  3. 实际开发中左连接使用最多,需注意关联字段索引优化。

文章链接:http://www.qwkf.cn//shujuku/36.html
文章标题:MySQL 多表关联 ——JOIN 查询详解

相关阅读