INNER JOIN只返回两表中完全匹配的记录,过滤掉任一表无对应数据的行;需通过ON指定等值关联条件,支持多表连续连接,但所有关联条件必须同时满足。
SQL内连接(INNER JOIN)只返回两个表中匹配的记录,不匹配的行会被自动过滤掉。这是最常用的连接方式,适
合需要严格对应关系的查询场景。
内连接的标准写法是用 INNER JOIN ... ON 明确指定关联条件,ON 后必须是两个表字段之间的逻辑等值判断(如 users.id = orders.user_id)。虽然 JOIN 默认就是 INNER JOIN,但显式写出更清晰、可读性更强。
比如要查看每个订单的下单人姓名和邮箱,就需要把 orders 表和 users 表连起来:
SELECT o.id, o.amount, u.name, u.email FROM orders AS o INNER JOIN users AS u ON o.user_id = u.id;
这里 o.user_id 是外键,指向 users.id 主键。只要 orders 中某条记录的 user_id 在 users 表里不存在,这条订单就不会显示。
当需要同时获取订单、用户、商品三方面信息时,可以连续使用 INNER JOIN:
SELECT o.id, u.name, p.title, o.quantity, o.amount FROM orders o INNER JOIN users u ON o.user_id = u.id INNER JOIN products p ON o.product_id = p.id;
注意:每加一个表,就要新增一个 ON 条件;所有连接条件都必须满足,缺一不可。如果某个订单的 product_id 在 products 表中找不到,整条记录也会被排除。
INNER JOIN 容易出错的地方往往不在语法,而在业务理解:
WHERE o.user_id = u.id),这在多表时可能引发笛卡尔积或逻辑混乱u.id 和 p.id),否则会报错基本上就这些。INNER JOIN 不复杂,但容易忽略匹配逻辑是否符合实际业务含义。