SQL合并查询结果
在数据库查询中,有时候需要将多个查询结果合并在一起进行展示。SQL提供了几种常见的方式来合并查询结果,包括UNION、UNION ALL、INTERSECT和EXCEPT。本文将详细讨论这几种合并查询结果的方法,并给出示例代码及运行结果。
UNION操作符
UNION操作符用于合并两个或多个SELECT语句的结果集,并去除重复的行。例如,假设有两个表A和B,我们要合并这两个表的结果集:
这条SQL语句会将表A和表B的结果集合并在一起,并去除重复的行。如果想要保留重复的行,可以使用UNION ALL操作符。
下面是一个示例:
假设有如下两个表students和teachers:
students表:
id | name | age | gender |
---|---|---|---|
1 | Alice | 20 | Female |
2 | Bob | 22 | Male |
3 | Cathy | 21 | Female |
teachers表:
id | name | age | gender |
---|---|---|---|
1 | David | 30 | Male |
2 | Emily | 28 | Female |
3 | Frank | 35 | Male |
我们可以使用UNION操作符将这两个表的结果集合并在一起:
运行结果:
id | name | age | gender |
---|---|---|---|
1 | Alice | 20 | Female |
2 | Bob | 22 | Male |
3 | Cathy | 21 | Female |
1 | David | 30 | Male |
2 | Emily | 28 | Female |
3 | Frank | 35 | Male |
UNION ALL操作符
UNION ALL操作符用于合并两个或多个SELECT语句的结果集,并保留重复的行。与UNION操作符不同的是,UNION ALL不会去除重复的行。
下面是一个示例:
运行结果:
id | name | age | gender |
---|---|---|---|
1 | Alice | 20 | Female |
2 | Bob | 22 | Male |
3 | Cathy | 21 | Female |
1 | David | 30 | Male |
2 | Emily | 28 | Female |
3 | Frank | 35 | Male |
INTERSECT操作符
INTERSECT操作符用于取两个查询结果集的交集。即返回同时存在于两个结果集的行。例如:
下面是一个示例:
假设有一个表students和一个表teachers,我们要找出同时存在于这两个表中的记录:
运行结果:
| id | name | age | gender |
EXCEPT操作符
EXCEPT操作符用于取第一个查询结果集减去第二个查询结果集的结果。即返回存在于第一个结果集但不存在于第二个结果集中的行。例如:
下面是一个示例:
假设有一个表students和一个表teachers,我们要找出students中存在但teachers中不存在的记录:
运行结果:
id | name | age | gender |
---|---|---|---|
1 | Alice | 20 | Female |
2 | Bob | 22 | Male |
3 | Cathy | 21 | Female |
总结一下,SQL提供了四种合并查询结果的方式:UNION、UNION ALL、INTERSECT和EXCEPT。根据需求的不同,我们可以选择合适的操作符来完成查询。