📅  最后修改于: 2023-12-03 15:05:20.110000             🧑  作者: Mango
在SQLite数据库中,UNION子句允许程序员将两个或多个 SELECT 语句的结果合并为一个结果集。这种合并不只是将结果集连接在一起,还可以去重、排序、过滤等操作。
UNION子句的语法如下:
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
WHERE condition
UNION [ ALL | DISTINCT ]
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
WHERE condition
[ ORDER BY column(s) ];
其中,第一个 SELECT 语句和后面所有的 SELECT 语句都必须拥有相同的列数和相似的数据类型。UNION 中的 ALL 选项表示结果集包含所有的结果,包括重复项;DISTINCT 表示结果集包含不重复的结果。ORDER BY 子句用于排序结果集。
假设有如下两个表格:
Person表:
id | name | age | gender
----|------|-----|-------
1 | Tom | 20 | M
2 | Bob | 25 | M
3 | Alice| 22 | F
Employee表:
id | name | salary
----|-------|-------
1 | Tom | 5000
2 | Bob | 6000
4 | Sarah | 7000
将 Person 表和 Employee 表按照名字进行匹配:
SELECT name FROM Person
UNION ALL
SELECT name FROM Employee;
结果为:
name
-----
Tom
Bob
Alice
Tom
Bob
Sarah
使用 ALL 关键字,结果中包含了重复的name。如果使用 DISTINCT:
SELECT name FROM Person
UNION
SELECT name FROM Employee;
结果为:
name
-----
Alice
Bob
Sarah
Tom
结果中“Tom”和“Bob”只出现了一次。
将两个表格合并,并按年龄排序:
SELECT name, age FROM Person
UNION
SELECT name, 0 as age FROM Employee
ORDER BY age;
结果为:
name | age
------|----
Tom | 0
Bob | 0
Alice | 22
由于Employee表中没有age列,我们用0作为占位符。按照age列排序后,Tom和Bob的age值为0,所以它们排在Alice之前。
通过示例,我们学习了在 SQLite 中使用 UNION 子句。UNION 子句可以将多个 SELECT 语句的结果合并成一个结果集,支持去重、排序等操作。在实际的数据库应用中,使用 UNION 可以大大简化复杂的数据库查询操作。