INNER JOIN 返回两表中满足连接条件的匹配记录,语法为SELECT...FROM 表1 INNER JOIN 表2 ON 条件;可省略INNER关键字,需用表名限定同名字段,NULL值行会被自动过滤。

MySQL 中的 INNER JOIN 用于从两个或多个表中返回**匹配的记录**,即只保留连接条件成立的行。它是最常用、最基础的连接方式,理解它对写好关联查询至关重要。
INNER JOIN 的基本语法
标准写法如下:
SELECT 字段列表
FROM 表1
INNER JOIN 表2 ON 表1.字段 = 表2.字段;
注意:
• INNER 关键字可省略,直接写 JOIN 默认就是内连接;
• ON 后面必须指定明确的关联条件,通常是主键与外键的对应关系;
• 字段名若在多个表中存在,需用 表名.字段名 明确限定,避免歧义。
实际例子:查用户订单信息
假设有两张表:
-
users(id, name, email) -
orders(id, user_id, product, amount)
要查出“每个订单对应的用户名和邮箱”,可用:
拍客竞拍系统是一款免费竞拍网站建设软件,任何个人可以下载使用,但未经商业授权不能进行商业活动,程序源代码开源,任何个人和企业可以进行二次开发,但不能以出售和盈利为目的。安装方法,将www文件夹里面的所有文件上传至虚拟主机,在浏览器执行http://你的域名/install.php或者直接导入数据库文件执行。本次升级优化了一下内容1,程序和模板完美分离。2,优化了安装文件。3,后台增加模板切换功能。
SELECT o.id, u.name, u.email, o.product, o.amount
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
结果中不会出现没有下单的用户,也不会出现 user_id 在 users 表中找不到的订单——这就是内连接的“严格匹配”特性。
多表 INNER JOIN 写法
连接三个及以上表时,只需连续添加 INNER JOIN ... ON ...:
SELECT u.name, o.product, p.category
FROM users u
INNER JOIN orders o ON u.id = o.user_id
INNER JOIN products p ON o.product_id = p.id;
每一步都基于前一个结果继续筛选,逻辑清晰,但要注意连接顺序不影响最终结果(只要条件正确),不过会影响执行效率,建议把数据量小的表放在前面或合理使用索引。
常见注意事项
- 如果连接字段有 NULL 值,这些行会被自动过滤掉(因为
NULL = 任何值结果为 FALSE) - 连接条件尽量使用索引字段,否则可能触发全表扫描,大幅降低性能
- 别名(如
u,o)不是必须的,但强烈推荐,让 SQL 更简洁易读 - 不要混淆
WHERE和ON:多表连接时,过滤条件写在ON是连接逻辑的一部分;写在WHERE是对连接结果的二次筛选,影响结果集大小









