/结果集操作注意事项/
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:减法的意思

299

被折叠的 条评论
为什么被折叠?



