DB2对集合的处理
有a和b两个集合
数据:
a数据
b数据
一、交集
![](https://i-blog.csdnimg.cn/blog_migrate/73a63e5587ed95dec0eb3c07c6c9b6fd.png)
INTERSECT
INTERSECT ALL(等效INTERSECT)
select name, age from sys_user_a
intersect
select name, age from sys_user_b
select name, age from sys_user_a
intersect all
select name, age from sys_user_b
二、差集
![](https://i-blog.csdnimg.cn/blog_migrate/fde6eb17489dd1bbfde16fad0eaa293e.png)
EXCEPT
EXCEPT ALL(等效EXCEPT)
select name, age from sys_user_a
except
select name, age from sys_user_b
![](https://i-blog.csdnimg.cn/blog_migrate/9dc42819a26393ba0da9954685493095.png)
select name, age from sys_user_a
except all
select name, age from sys_user_b
![](https://i-blog.csdnimg.cn/blog_migrate/45edd8a779ab6b29935826b166b6fcbe.png)
三、合集
![](https://i-blog.csdnimg.cn/blog_migrate/f937549d9c4472053955271961d2cbf0.png)
UNION(消重合集)
UNION ALL(不消重合集)
select name, age from sys_user_a
union
select name, age from sys_user_b
![](https://i-blog.csdnimg.cn/blog_migrate/9ef327eb194bd4047496b7f3c1111f11.png)
当使用 union all 时,可以看到出现了两条(‘李莉’, ‘14’)的数据,而在 union 时只有一条
select name, age from sys_user_a
union all
select name, age from sys_user_b
![](https://i-blog.csdnimg.cn/blog_migrate/6b899cebb0662671ba361a100ddb4783.png)
四、其他情况
![4-1](https://i-blog.csdnimg.cn/blog_migrate/fa3bce3b8f194b12e0212e3d2acc6615.png)
图4-1可以使用图4-2和图4-3的合集表示,也可以使用图3-1和图1-1的差集表示
![4-2](https://i-blog.csdnimg.cn/blog_migrate/ede6c03d01a362cac30446204f51bf07.png)
![4-3](https://i-blog.csdnimg.cn/blog_migrate/a94582319b68e83af1e9409f48f45051.png)
对于图4-2和图4-3的情况可以使用NOT IN 子查询、LEFT JOIN 和 NULL条件、NOT EXISTS子查询
以图4-2的效果为例
select name, age from sys_user_a
where (name, age) not in (select name, age from sys_user_b)
select a.name, a.age from sys_user_a a
left join (select name, age from sys_user_b) b on a.name = b.name and a.age = b.age
where b.name is null
select name, age from sys_user_a a
where not exists (select name, age from sys_user_b b where a.name = b.name and a.age = b.age)