0Pricing
SQL Academy · 课时

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_id

NATURAL 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为什么需要连接(关系模型回顾)
  2. INNER JOIN 的工作机制
  3. LEFT/RIGHT JOIN 与外连接
  4. 自连接与别名
← 返回 SQL Academy