在数据库操作中,有时我们希望将来自多个查询的数据合并在一起而非通过多表连接(JOIN)。这时就需要用到 UNIONUNION ALL 子句。它们是 SQLite 支持的集合操作(Set Operation)之一,功能强大且高效。

📌 本文由 www.52kanjuqing.com 整理,仅此一次引用。


📚 目录

  1. 什么是 UNION?
  2. UNION 与 UNION ALL 的区别
  3. 使用 UNION 的语法与规则
  4. 多个 SELECT 的字段兼容性
  5. ORDER BY 的使用位置和注意事项
  6. 使用 LIMIT 与 OFFSET 的联合查询
  7. UNION 与子查询/临时表的结合
  8. 实际示例:多表类型合并
  9. 出站参考链接与站内推荐
  10. 参考资料

1. 什么是 UNION?

UNION 是一种 集合操作,它将多个 SELECT 查询的结果合并为一个结果集,并默认去除重复记录。

📌 注意:

  • 各个 SELECT 查询必须返回相同数量和类型的列
  • 合并后的结果默认是去重后的。

2. UNION 与 UNION ALL 的区别

子句描述
UNION合并多个结果集,自动去除重复记录
UNION ALL合并多个结果集,保留所有记录,包括重复项
SELECT name FROM students
UNION
SELECT name FROM teachers;

SELECT name FROM students
UNION ALL
SELECT name FROM teachers;


3. 使用 UNION 的语法与规则

基本语法结构如下:

SELECT column1, column2 FROM table1
UNION [ALL]
SELECT column1, column2 FROM table2;

要求:

  • 所有 SELECT 的列数必须一致
  • 对应位置的列类型应兼容
  • 可以用 AS 设置别名统一列名

4. 多个 SELECT 的字段兼容性

允许不同表的列名不一致,但列数量和类型需一致。例如:

SELECT id AS identifier, name FROM customers
UNION
SELECT user_id, full_name FROM employees;


5. ORDER BY 的使用位置和注意事项

ORDER BY 只能用于整个 UNION 查询的最后部分

SELECT name FROM students
UNION
SELECT name FROM teachers
ORDER BY name ASC;

📌 不允许在每个 SELECT 内部使用 ORDER BY。


6. 使用 LIMIT 与 OFFSET 的联合查询

LIMIT 和 OFFSET 必须出现在最后:

SELECT name FROM students
UNION
SELECT name FROM teachers
ORDER BY name
LIMIT 10 OFFSET 5;


7. UNION 与子查询/临时表的结合

可以嵌套 UNION 并组合子查询:

SELECT * FROM (
  SELECT id, name FROM archived_users
  UNION
  SELECT id, name FROM active_users
) AS all_users
WHERE name LIKE 'J%';


8. 实际示例:多表类型合并

假设你有以下两张表:

CREATE TABLE blogs (
  id INTEGER,
  title TEXT,
  created_at DATE
);

CREATE TABLE news (
  id INTEGER,
  title TEXT,
  created_at DATE
);

合并最新内容:

SELECT id, title, created_at FROM blogs
UNION ALL
SELECT id, title, created_at FROM news
ORDER BY created_at DESC
LIMIT 20;


9. 🔗 出站参考链接与站内推荐

官方文档与教程:

站内推荐阅读(www.52kanjuqing.com):


10. 📚 参考资料

  1. SQLite Official Docs – Compound SELECT
    https://www.sqlite.org/lang_select.html#compoundselect
  2. Ben Forta. SQL in 10 Minutes, Sams Teach Yourself
  3. Stack Overflow – sqlite-union tag
  4. SQLite Tutorial – https://www.sqlitetutorial.net/sqlite-union/

✅ 下一篇将是 《SQLite NULL 值的处理与逻辑解析》。是否继续?我也可以将前几篇汇总打包为文档或页面。你需要我输出 Markdown、HTML、PDF 格式等版本吗?