0Pricing
SQL Academy · 课时

UNION、INTERSECT、EXCEPT

使用 UNION 合并兼容的结果集,使用 INTERSECT 查找共有行,并使用 EXCEPT 查找差集。

UNION、INTERSECT、EXCEPT 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。

集合运算概述

三个集合运算符按行组合结果集:

  • UNION — A 或 B 中的行(去重)
  • INTERSECT — A 和 B 中都有的行
  • EXCEPT — A 中有但 B 中没有的行

UNION

合并两个结果集,并删除重复行:

SELECT email FROM users
UNION
SELECT email FROM newsletter_subscribers;

列兼容性

两个查询必须拥有相同数量的列,并且列类型兼容:

-- OK:
SELECT email FROM users UNION SELECT email FROM customers;

-- ERROR — different column count:
SELECT email FROM users UNION SELECT email, name FROM customers;

INTERSECT

同时出现在两个查询中的行:

SELECT product_id FROM orders WHERE user_id = 1
INTERSECT
SELECT product_id FROM orders WHERE user_id = 2;
-- Products bought by BOTH users.

EXCEPT

出现在第一个查询中但不在第二个查询中的行:

SELECT product_id FROM products
EXCEPT
SELECT product_id FROM order_items;
-- Products never ordered.

集合运算符中的 ORDER BY

ORDER BY 作用于合并后的完整结果。请将它放在末尾:

SELECT email FROM users
UNION
SELECT email FROM customers
ORDER BY email;

集合运算符与 NULL

对于集合运算,两个 NULL 会被视为相等 — UNION 会将它们去重,INTERSECT 会将它们匹配。(这与 WHERE 中的 NULL = NULL 不同。)

对子查询使用集合运算符

请用括号包围子查询,以提高可读性并与 LIMIT 组合:

(SELECT id FROM users ORDER BY created_at DESC LIMIT 10)
UNION
(SELECT id FROM users ORDER BY total DESC LIMIT 10);

运算符优先级

INTERSECT 的绑定优先级高于 UNION/EXCEPT。请使用括号:

SELECT id FROM a
UNION
SELECT id FROM b
INTERSECT
SELECT id FROM c;
-- means: a UNION (b INTERSECT c)

-- Use parens to force order:
(SELECT id FROM a UNION SELECT id FROM b) INTERSECT SELECT id FROM c;

性能

UNION 会通过排序进行去重。INTERSECT 和 EXCEPT 也会执行类似的工作。对于大型集合,请优先考虑 JOIN/EXISTS 模式,并且只在集合运算的语义明确合适时使用它们。

标准 SQL 与供应商差异

PostgreSQL 支持全部三个运算符。MySQL 直到 8.0.31 才加入 INTERSECT 和 EXCEPT;较早版本需要使用 JOIN/NOT IN 模拟。

回顾

集合运算符可以表达行之间的 OR/AND/MINUS。

  • UNION — 合并并去重
  • INTERSECT — 共同的行
  • EXCEPT — A 减去 B

快速检查

哪个集合运算符会返回“A 中有但 B 中 NOT 有的行”?

常见问题解答

「UNION、INTERSECT、EXCEPT」课时是免费的吗?

是的 — 「UNION、INTERSECT、EXCEPT」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。

「UNION、INTERSECT、EXCEPT」这节课中我会学到什么?

使用 UNION 合并兼容的结果集,使用 INTERSECT 查找共有行,并使用 EXCEPT 查找差集。 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 SQL Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「UNION、INTERSECT、EXCEPT」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 SQL Academy 课中编写并运行代码吗?

能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. UNION、INTERSECT、EXCEPT
  2. UNION ALL 与 UNION(去重成本)
  3. CASE 表达式与透视查询
  4. 交叉表模式(PostgreSQL crosstab())
← 返回 SQL Academy