SQLite Unions 子句
                           
天天向上
发布: 2025-03-04 19:28:09

原创
70 人浏览过

SQLite 中,UNION 子句用于合并多个 SELECT 语句的结果,并返回去重后的结果。如果你想包含重复数据,可以使用 UNION ALL


1. UNION 语法

SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;
  • UNION 默认去重重复行。
  • 列的数量和数据类型必须匹配。

2. UNION 示例

示例:合并两个表的用户

CREATE TABLE users1 (
    id INTEGER PRIMARY KEY,
    name TEXT
);

CREATE TABLE users2 (
    id INTEGER PRIMARY KEY,
    name TEXT
);

INSERT INTO users1 VALUES (1, 'Alice'), (2, 'Bob');
INSERT INTO users2 VALUES (2, 'Bob'), (3, 'Charlie');

SELECT name FROM users1
UNION
SELECT name FROM users2;

结果

name
-------
Alice
Bob
Charlie
  • Bobusers1users2 都出现,但 UNION 只返回唯一值

3. UNION ALL(不去重)

如果你希望保留重复数据,可以使用 UNION ALL

SELECT name FROM users1
UNION ALL
SELECT name FROM users2;

结果

name
-------
Alice
Bob
Bob
Charlie
  • UNION ALL 不会去重,因此 Bob 出现了两次。

4. ORDER BYUNION

如果需要排序,必须放在最后

SELECT name FROM users1
UNION
SELECT name FROM users2
ORDER BY name DESC;

结果

name
-------
Charlie
Bob
Alice

5. UNION 结合 WHERE

可以在每个 SELECT 语句中使用 WHERE 过滤数据:

SELECT name FROM users1 WHERE id < 2
UNION
SELECT name FROM users2 WHERE id > 2;
  • users1 仅返回 id < 2 的数据。
  • users2 仅返回 id > 2 的数据。

6. UNION 结合 DISTINCT

UNION 默认去重,但你仍然可以使用 DISTINCT

SELECT DISTINCT name FROM users1
UNION
SELECT DISTINCT name FROM users2;
  • 这样即使 users1users2 内部有重复数据,仍然可以保证去重。

7. UNION 限制结果数

可以在最终查询中使用 LIMIT 进行分页:

SELECT name FROM users1
UNION
SELECT name FROM users2
LIMIT 2;
  • 仅返回前 2 行

总结

关键字作用
UNION去重合并多个 SELECT 结果
UNION ALL不去重合并多个 SELECT 结果
ORDER BY只能用于最终的 SELECT 结果
LIMIT限制返回行数

更多详细内容请关注其他相关文章。

发表回复 0

Your email address will not be published. Required fields are marked *