📜  SQLite-UNION子句(1)

📅  最后修改于: 2023-12-03 15:05:20.110000             🧑  作者: Mango

SQLite-UNION子句

在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
示例1:使用 UNION ALL

将 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”只出现了一次。

示例2:使用 ORDER BY

将两个表格合并,并按年龄排序:

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 可以大大简化复杂的数据库查询操作。