SQL关键字三分钟入门:JOIN 联表查询不再难

发布于:2025-06-18 ⋅ 阅读:(16) ⋅ 点赞:(0)

在实际业务中,数据往往分布在多个表中。例如,用户信息可能在 users 表里,订单信息在 orders 表里。

那么,我们怎么把这两张表的数据“连起来”进行查询呢?这就轮到 SQL 中非常重要的关键字了 —— JOIN


一、么是 JOIN?

JOIN 是 SQL 中用于连接两个或多个表的关键字。它通过一个共同的字段(如主键和外键)将不同表中的数据关联在一起。

你可以把它理解为:“根据某个条件,把两张或多张表合并成一张大表来查询”。


二、常见的 JOIN 类型

JOIN 类型 含义说明
INNER JOIN 只返回两个表中匹配的行
LEFT JOIN 返回左表所有行,即使右表没有匹配项(用 NULL 填充)
RIGHT JOIN 返回右表所有行,即使左表没有匹配项
FULL OUTER JOIN 返回两个表的所有行,不管有没有匹配(部分数据库不支持)

⚠️ 注意:MySQL 不支持 FULL OUTER JOIN,但可以通过 UNION 实现。


三、示例讲解

假设我们有两个表:

表1:users(用户表)

id name
1 张三
2 李四
3 王五

表2:orders(订单表)

order_id user_id product
101 1 手机
102 1 耳机
103 2 鼠标

示例1:INNER JOIN(内连接)

SELECT users.name, orders.product
FROM users
INNER JOIN orders ON users.id = orders.user_id;
结果:
name product
张三 手机
张三 耳机
李四 鼠标

 只有 id 在两个表中都存在的记录才会被显示。


 示例2:LEFT JOIN(左连接)

SELECT users.name, orders.product
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
结果:
name product
张三 手机
张三 耳机
李四 鼠标
王五 NULL

 左表(users)所有记录都会显示,右表没有对应记录时用 NULL 填充。


 示例3:RIGHT JOIN(右连接)

SELECT users.name, orders.product
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;
结果:
name product
张三 手机
张三 耳机
李四 鼠标

 和 LEFT JOIN 相反,保留的是右表的所有记录。


注意:

  • JOIN 的核心是找到两个表之间的关联关系,通常是主键与外键的关系。

  • 如果你不确定应该用哪种 JOIN,先尝试画出两个表的结构图,再决定需要保留哪些数据。

  • 多个表也可以一起连接,比如:

    SELECT u.name, o.product, a.address
    FROM users u
    LEFT JOIN orders o ON u.id = o.user_id
    LEFT JOIN addresses a ON u.id = a.user_id;

四、 总结对比表

JOIN类型 是否保留左表全部 是否保留右表全部 匹配方式
INNER JOIN 仅返回匹配项
LEFT JOIN 左表全保留
RIGHT JOIN 右表全保留
FULL JOIN 两边都保留

网站公告

今日签到

点亮在社区的每一天
去签到