Minus:返回的T1-T2是差集。
--两张表所选字段的内容进行比较,返回(表1-表2)的差,表中数据量较大使用并行方式/*+parallel(8)*/
select /*+parallel(8)*/ LSH, BXJGDM, BXJGMC, KHBH from 表1
minus
select /*+parallel(8)*/ LSH, BXJGDM, BXJGMC, KHBH from 表2
--上下表的顺序改变结果是不同的 ,返回(表2-表1)的差,
select /*+parallel(8)*/ LSH, BXJGDM, BXJGMC, KHBH from 表2
minus
select /*+parallel(8)*/ LSH, BXJGDM, BXJGMC, KHBH from 表1
intersect 获取两张表相同的部分
--两张表所选字段的交集,就是获取两张表相同的部分
select /*+parallel(8)*/ LSH, BXJGDM, BXJGMC, KHBH from ydetl.表2
intersect
select /*+parallel(8)*/ LSH, BXJGDM, BXJGMC, KHBH from east.表1
exists 存在于
exists比较难理解,看了很多解释,还是回归本源,作为使用者只要知道怎么用能够达到你的目的就够了。
1,两张表比较,必须带where条件进行两张表关联,不然结果不同。结果集是:LSH字段相同的情况下,表1 存在于表2 中的数据。
exists引导的子句有结果集返回true和false,select 1 这个1这个数字没有意义,是字段名也可以,是什么都可以,这个记住就行了。
select /*+parallel(8)*/ lsh, bxjgdm, bxjgmc, khbh from 表1
where exists(select 1 from 表2 where 表1.lsh=表2.lsh and ……)
not exists 不存在于
两张表比较,需带where条件。结果集是:lsh和khbh字段相同的情况下,表1 不存在于表2 中的数据。
select /*+parallel(8)*/ lsh, bxjgdm, bxjgmc, khbh from 表1
where not exists(select 1 from 表2 where 表1.lsh=表2.lsh and 表1.khbh=表2.khbh ……)
union all 两张表数据合集,字段数量要一致
union 两张表去重后的合集,字段数量要一致
总结:可以联合使用需要加()
(select /*+parallel(8)*/ LSH, BXJGDM, BXJGMC, KHBH from ydetl.表2
intersect
select /*+parallel(8)*/ LSH, BXJGDM, BXJGMC, KHBH from east.表1 )
minus
(select /*+parallel(8)*/ LSH, BXJGDM, BXJGMC, KHBH from ydetl.表3
union
select /*+parallel(8)*/ LSH, BXJGDM, BXJGMC, KHBH from east.表4)