【MySQL】联合查询

在 MySQL 中,联合查询(JOIN 查询)是用来把多个表的数据按照某个关联字段组合在一起进行查询的方式。通常用于存在关联关系的表,比如:用户表 + 订单表。


一、JOIN 联合查询的基本语法

SELECT 字段列表
FROM 表1
JOIN 表2
ON 表1.字段 = 表2.字段;

  • JOIN:表示连接表
  • ON:指定连接条件
  • 一般使用 主键和外键进行关联

二、常见的联合查询类型

1️⃣ INNER JOIN(内连接)

只返回两个表中匹配的数据

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

含义:

  • users 表 和 orders 表
  • 只显示 有订单的用户

示例结果:

idnameorder_id
1Tom101
2Lucy102

没有订单的用户不会出现。


2️⃣ LEFT JOIN(左连接)

返回左表全部数据 + 右表匹配数据

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

含义:

  • 以 users 表为主
  • 即使没有订单也会显示

示例:

idnameorder_id
1Tom101
2Lucy102
3JackNULL

3️⃣ RIGHT JOIN(右连接)

返回右表全部数据 + 左表匹配数据

SELECT u.id, u.name, o.order_id
FROM users u
RIGHT JOIN orders o
ON u.id = o.user_id;

含义:

  • 以 orders 表为主

4️⃣ 多表联合查询

MySQL 可以连接 3个以上的表

SELECT u.name, o.order_id, p.product_name
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN products p ON o.product_id = p.id;

查询结果:

用户 → 订单 → 商品


三、JOIN 的实际案例

表结构

users

idname
1Tom
2Lucy

orders

order_iduser_id
1011
1022

查询用户订单

SELECT users.name, orders.order_id
FROM users
JOIN orders
ON users.id = orders.user_id;

结果:

nameorder_id
Tom101
Lucy102

四、联合查询的优化技巧

1 使用别名(推荐)

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

代码更简洁。


2 建立索引

CREATE INDEX idx_user_id ON orders(user_id);

JOIN 查询会明显加速。


3 只查询需要字段

❌ 不推荐

SELECT *

✅ 推荐

SELECT u.name, o.order_id


五、JOIN vs 子查询

JOIN(推荐)

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

子查询

SELECT name
FROM users
WHERE id IN (SELECT user_id FROM orders);

一般来说:

  • JOIN 性能更好
  • 子查询可读性有时更好

✅ 总结

MySQL 联合查询常见 3 种:

类型说明
INNER JOIN两表都存在的数据
LEFT JOIN左表全部
RIGHT JOIN右表全部

如果你愿意,我可以继续给你讲 MySQL 联合查询 90% 程序员都会写错的 6 个坑(面试 + 实战非常常见)。

文章已创建 5103

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部