首页/数据/SQL 速查/INTERSECT 与 EXCEPT 交集/差集
本包目录(311 条)

INTERSECT 与 EXCEPT 交集/差集

标准集合运算:INTERSECT 取两查询都有的行,EXCEPT 取前一查询有而后一查询没有的行,默认都去重。

SQL 速查数据更新于 2026-10-12

示例

示例
SELECT id FROM members
INTERSECT
SELECT id FROM paid_users;

SELECT id FROM members
EXCEPT
SELECT id FROM blacklist;    -- 标准/PG 写法;Oracle 叫 MINUS

兼容写法

兼容写法
-- 交集
SELECT m.id FROM members m
JOIN paid_users p ON p.id = m.id;

-- 差集
SELECT m.id FROM members m
WHERE NOT EXISTS (SELECT 1 FROM blacklist b WHERE b.id = m.id);
版本MySQL 8.0.31 起支持 INTERSECT/EXCEPT;更早版本用 JOIN/NOT EXISTS 模拟
去重默认去重,保留重复用 INTERSECT ALL / EXCEPT ALL
优先级MySQL 8 中 INTERSECT 优先级高于 UNION/EXCEPT

易错点

  • 旧版本 MySQL 执行 INTERSECT 会直接语法报错,迁移前先确认目标库版本(SELECT VERSION())
  • INTERSECT/EXCEPT 默认按整行去重比较,参与比较的列顺序与类型要严格对齐

数据来源与参考

  • MySQL 8.0 Reference Manual · INTERSECT and EXCEPT
  • PostgreSQL Documentation · Combining Queries
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌