INNER JOIN用于返回两表中满足连接条件的交集数据,只包含能匹配上的行。例如查询有订单的用户及其商品时,使用SELECT users.name, orders.product FROM users INNER JOIN orders ON users.user_id = orders.user_id;若用户无订单或订单无对应用户,则不显示。建议连接字段建立索引以提升性能,可多表连接且常用等值条件,也可用别名简化语法。与LEFT JOIN保留左表所有行不同,INNER JOIN仅返回双方匹配的记录,适合筛选共存数据场景。

在MySQL中,INNER JOIN 是最常用的表连接方式之一,用于从两个或多个表中提取**同时满足连接条件**的数据。它只返回两表中“交集”部分的记录,即左右两边都能匹配上的行。
INNER JOIN 的基本语法
结构如下:
SELECT 列名列表FROM 表1
INNER JOIN 表2 ON 表1.列 = 表2.列;
说明:
- 表1 和 表2 是要连接的数据表
- ON 后面是连接条件,通常基于主键与外键关系
- 只有当 ON 条件成立时,对应行才会出现在结果中
一个实际例子:用户和订单表
假设有两张表:
- users(用户表):user_id, name
- orders(订单表):order_id, user_id, product
你想查出每个下单用户的姓名及其购买的商品。使用 INNER JOIN 如下:
SELECT users.name, orders.productFROM users
INNER JOIN orders ON users.user_id = orders.user_id;
结果将只包含那些在 users 表中有记录、且在 orders 表中也有对应订单的用户。如果某个用户没有下单,就不会出现在结果里;同样,孤立的订单(user_id 不存在于 users 表)也不会被返回。
INNER JOIN 的特点与注意事项
- 返回的是“交集”,不是全量数据
- 连接字段建议建立索引,否则大表连接会很慢
- 可以连接多个表,比如:
SELECT ... FROM A INNER JOIN B ON ... INNER JOIN C ON ... - ON 条件不限于等值判断,也可用 >、
- 字段名相同可用别名区分,如:
SELECT u.name, o.product FROM users u INNER JOIN orders o ON u.user_id = o.user_id;
与其他 JOIN 的区别简要说明
- LEFT JOIN:保留左表所有行,右表无匹配则补 NULL
- RIGHT JOIN:保留右表所有行
- INNER JOIN:只保留两边都能匹配的行
如果你只关心“有订单的用户信息”,INNER JOIN 最合适。若想查“所有用户,包括没下单的”,就得用 LEFT JOIN。
基本上就这些。掌握 INNER JOIN 是写多表查询的基础,理解其“取交集”的逻辑很关键。不复杂但容易忽略。










