oracle结果集操作总结表与表之间关系

/结果集操作注意事项/
1.一个完整的select查询语句构成,就是一个查询结果集;
2.如果要查询某个完整的select查询语句结果,就要使用子查询;
3.如果要将多个结果集的数据合在一起的结果,就要使用union或union all;
4.如果要得出多个结果集交叉,匹配,关联的结果,就要使用inner/left/right/full join(注:需要关联条件);
5.如果要得出一个结果集在另一个结果集里存在或不存在,就要使用in或exists(注:需要关联条件)。

/结果集操作示意图/

                      《表与表之间关系》
                    1.交集
                    2.差集
                    3.并集

我们可以用以下技术可以实现操作,提供性能我们会利用以前学到的知识。
结果集:A

结果集:B

【示意图01】取结果集A与结果集B交叉部分的所有数据,用inner join或exists实现。
交集:in exists intersect

【示意图02】取结果集A部分的所有数据,用left join实现。
差集:minus left \not exists

【示意图03】取结果集B部分的所有数据,用right join实现。
差集:minus left join \not in 或 not exists

【示意图04】取结果集A部分和B部分的所有数据,用full join或union all实现。
并集:full join \union all

/结果集操作示例/
【准备工作】
create table a(serv_number varchar2(11));create table b(serv_number varchar2(11));select * from a for update;131131132132132133134135136select * from b for update;131131132133137137138139

【需求场景01】将结果集A与结果集B能关联/匹配上的号码显示出来。
select t1.serv_number,t2.serv_numberfrom a t1,b t2where t1.serv_number = t2.serv_number;
结果见下:
select t1.serv_number,t2.serv_numberfrom (select serv_number from a) t1inner join(select serv_number from b) t2on t1.serv_number = t2.serv_number;

结果见下:

示意图:

【需求场景02】将结果集A的号码显示出来,同时将结果集B中能与结果集A关联/匹配上的号码显示出来。select t1.serv_number,t2.serv_numberfrom (select serv_number from a) t1left join(select serv_number from b) t2on t1.serv_number = t2.serv_number;

结果见下:

示意图:

【需求场景03】将结果集B的号码显示出来,同时将结果集A中能与结果集B关联/匹配上的号码显示出来。select t1.serv_number,t2.serv_numberfrom (select serv_number from a) t1right join(select serv_number from b) t2on t1.serv_number = t2.serv_number;
结果见下:

示意图:

【需求场景04】select t1.serv_number,t2.serv_numberfrom (select serv_number from a) t1full join(select serv_number from b) t2on t1.serv_number = t2.serv_number;
结果见下:

示意图:

【需求场景05】将结果集A存在于结果集B的号码显示出来。select t1.serv_numberfrom a t1where exists ( select t2.serv_number from b t2 where t1.serv_number = t2.serv_number );

结果见下:

示意图:

【需求场景06】将结果集B存在于结果集A的号码显示出来。select t2.serv_numberfrom b t2where exists ( select t1.serv_number from a t1 where t1.serv_number = t2.serv_number );

结果见下:

示意图:

【需求场景07】将结果集A不存在于/去除结果集B的号码显示出来。
select t1.serv_numberfrom a t1where not exists ( select t2.serv_number from b t2 where t1.serv_number = t2.serv_number );

结果见下:

示意图:

【需求场景08】将结果集B不存在于/去除结果集A的号码显示出来。
select t2.serv_numberfrom b t2where not exists ( select t1.serv_number from a t1 where t1.serv_number = t2.serv_number );

结果见下:

示意图:

【需求场景09】将结果集A与结果集B的号码合在一起显示出来。
select serv_numberfrom ( select t1.serv_number from a t1 union all select t2.serv_number from b t2);

结果见下:

示意图:


select *
from vgopdw.tb_det_prov;
示例:

查询tb_det_prov这张表,前5条记录;再查询第5条到第10条的记录
select *
from vgopdw.tb_det_prov t
where rownum<=10
minus
select *
from vgopdw.tb_det_prov t
where rownum<=5;
示例:

minus:减法的意思

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值