oracle MINUS和NOT EXISTS、EXISTS和INTERSECT

有两个表,表中的记录如下:
表tb_test中的数据有:
SQL> select * from tb_test;
 
ID                                   NAME                                                      AGE
------------------------------------ -------------------------------------------------- ----------
1                                    A                                                          22
2                                    B                                                          23
3                                    C                                                  
4                                    D                                                  
5                                    E                                                          24
6                                    F                                                          25
7                                    G                                                          26
8                                    H                                                          22
 
8 rows selected
 表tb_test2中的数据有:
SQL> select * from tb_test2;
 
ID                                   NAME                                                      AGE
------------------------------------ -------------------------------------------------- ----------
1                                    A                                                          22
2                                    B                                                          23
3                                    C                                                  
4                                    D                                                  
5                                    E                                                          24
6                                    F                                                          25
 
6 rows selected

1、比较MINUS和NOT EXISTS
使用NOT EXISTS的查询结果:
SQL> SELECT * FROM tb_test t WHERE NOT EXISTS (SELECT * FROM tb_test2 t2 WHERE t2.id=t.id);
 
ID                                   NAME                                                      AGE
------------------------------------ -------------------------------------------------- ----------
7                                    G                                                          26
8                                    H                                                          22
使用MINUS的查询结果:
SQL> SELECT * FROM tb_test MINUS SELECT * FROM tb_test2;
 
ID                                   NAME                                                      AGE
------------------------------------ -------------------------------------------------- ----------
7                                    G                                                          26
8                                    H                                                          22
可以看出使用MINUS和NOT EXISTS的结果是一样的。
MINUS的意思是使用第一个查询的结果作为基础数据减去另一个查询结果作为最终结果集。可以解决的问题是“我需要返回在数据源A中存在,但是在B中不存在的数据集”。

2、比较EXISTS和INTERSECT
使用EXISTS的查询结果:
SQL> SELECT * FROM tb_test t WHERE EXISTS (SELECT * FROM tb_test2 t2 WHERE t2.id=t.id);
 
ID                                   NAME                                                      AGE
------------------------------------ -------------------------------------------------- ----------
1                                    A                                                          22
2                                    B                                                          23
3                                    C                                                  
4                                    D                                                  
5                                    E                                                          24
6                                    F                                                          25
 
6 rows selected
使用INTERSECT的查询结果:
 
SQL> SELECT * FROM tb_test t INTERSECT (SELECT * FROM tb_test2 t2);
 
ID                                   NAME                                                      AGE
------------------------------------ -------------------------------------------------- ----------
1                                    A                                                          22
2                                    B                                                          23
3                                    C                                                  
4                                    D                                                  
5                                    E                                                          24
6                                    F                                                          25
 
6 rows selected
可以看出使用EXISTS和INTERSECT的查询结果相同。
INTERSECT是返回查询中都存在的行,可以解决的问题为“我需要返回源A和B中都存在的数据”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值