INNER JOIN 的工作机制
将 INNER JOIN 理解为经过过滤的笛卡尔积,编写连接条件,并阅读连接的 EXPLAIN 输出。
INNER JOIN 的工作机制 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。
INNER JOIN
INNER JOIN 根据 ON 条件,只返回在两张表中都能找到匹配配对的行。
基本 INNER JOIN
查询每个订单及其所属用户:
SELECT o.id, o.total, u.email
FROM orders o
INNER JOIN users u ON u.id = o.user_id;
-- INNER is the default — you can also write:
SELECT o.id, o.total, u.email
FROM orders o
JOIN users u ON u.id = o.user_id;ON 中的多个条件
ON 子句是一个普通的布尔表达式:
SELECT *
FROM events e
JOIN sessions s
ON s.user_id = e.user_id
AND e.created_at BETWEEN s.start_at AND s.end_at;别名
别名可以缩短查询,并避免列引用不明确:
SELECT o.id, u.email
FROM orders AS o -- AS is optional
JOIN users AS u ON u.id = o.user_id;连接三张或更多表
重复 JOIN 子句,依次连接各张表:
SELECT o.id, u.email, p.name AS product
FROM orders o
JOIN users u ON u.id = o.user_id
JOIN products p ON p.id = o.product_id;USING (column)
当连接列在两张表中具有相同名称时,您可以写 USING——它会在输出中合并重复的列:
SELECT o.id, total, email
FROM orders
JOIN users USING (user_id); -- requires both tables to have user_idNATURAL JOIN
会根据所有同名列进行连接——请注意,添加列后这种写法可能变得脆弱。
-- Avoid in production code:
SELECT * FROM orders NATURAL JOIN users;JOIN 条件与 WHERE
对于 INNER JOIN,放在 ON 中的条件在逻辑上等价于放在 WHERE 中的条件。通常,定义 JOIN 关系的条件放在 ON 中;筛选行的条件放在 WHERE 中。
SELECT * FROM orders o
JOIN users u ON u.id = o.user_id -- join condition
WHERE u.country = 'US'; -- row filter结果倍增
如果 A 中的一行与 B 中的三行匹配,结果就会包含三行。这是正常现象,但在忘记这一点时可能会令人意外。需要聚合时,请谨慎使用 COUNT(*)。
自连接预览
您可以为表的每个实例指定不同的别名,从而将表与自身连接:
SELECT e.full_name AS employee, m.full_name AS manager
FROM employees e
JOIN employees m ON m.id = e.manager_id;INNER JOIN 性能
在以下情况下,内连接通常很快:
- 连接列已建立索引(尤其是 FK 一侧)
- 一张表较小(哈希连接),或两张表都已排序(归并连接)
- 尽早进行筛选,以保持较低的中间行数
回顾
INNER JOIN 只保留匹配的配对。
- 默认情况下,JOIN = INNER JOIN
- ON 表达连接条件
- 别名可以让查询更简洁
- 连接列应建立索引
快速检查
当某个订单没有匹配的用户(孤立订单)时,orders INNER JOIN users ON users.id = orders.user_id 会返回什么?
常见问题解答
「INNER JOIN 的工作机制」课时是免费的吗?
是的 — 「INNER JOIN 的工作机制」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。
「INNER JOIN 的工作机制」这节课中我会学到什么?
将 INNER JOIN 理解为经过过滤的笛卡尔积,编写连接条件,并阅读连接的 EXPLAIN 输出。 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SQL Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「INNER JOIN 的工作机制」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SQL Academy 课中编写并运行代码吗?
能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 为什么需要连接(关系模型回顾)
- INNER JOIN 的工作机制
- LEFT/RIGHT JOIN 与外连接
- 自连接与别名