SQLite Unions 子句
在 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
Bob在users1和users2都出现,但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 BY 与 UNION
如果需要排序,必须放在最后:
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;
- 这样即使
users1或users2内部有重复数据,仍然可以保证去重。
7. UNION 限制结果数
可以在最终查询中使用 LIMIT 进行分页:
SELECT name FROM users1
UNION
SELECT name FROM users2
LIMIT 2;
- 仅返回前 2 行。
总结
| 关键字 | 作用 |
|---|---|
UNION | 去重合并多个 SELECT 结果 |
UNION ALL | 不去重合并多个 SELECT 结果 |
ORDER BY | 只能用于最终的 SELECT 结果 |
LIMIT | 限制返回行数 |
更多详细内容请关注其他相关文章。