oracle基础积累-join,left join,right join,inner join,full join,left outer join,right outer join 之间的区别

场景:
        基础知识查询.
环境:
        Oracle Database 11g; PL/SQL Developer
1.表数据
1.1 传感器采集区域 sensor_collect_region
    
1.2 传感器采集数据 sensor_collect_data
    
2. join
        两张表根据on条件进行连接查询,查询出两张表完全匹配的结果集.

select *
  from sensor_collect_data aa
  join sensor_collect_region bb
    on aa.region = bb.region

   
3. left join (左连接)
    两张表根据on条件进行左连接查询,会返回left join左边表所有行,即使右表没有匹配记录.

select *
  from sensor_collect_data aa
  left join sensor_collect_region bb
    on aa.region = bb.region

     
4. right join (右连接)
    两张表根据on条件进行右连接查询,会返回right join右边表所有行,即使左表没有匹配记录.

select *
  from sensor_collect_data aa
 right join sensor_collect_region bb
    on aa.region = bb.region

    
5. inner join (内连接)
    两张表根据on条件进行内连接查询,查询出两张表完全匹配的结果集.

select *
  from sensor_collect_data aa
 inner join sensor_collect_region bb
    on aa.region = bb.region

    
6. full join (全连接)
    两张表根据on条件进行连接查询,返回左表和右表中所有记录,包括没有匹配的记录.

select *
  from sensor_collect_data aa
  full join sensor_collect_region bb
    on aa.region = bb.region

    
7. left outer join
   与left join相同

select *
  from sensor_collect_data aa
  left outer join sensor_collect_region bb
    on aa.region = bb.region

    
8. right outer join
   right join 相同

select *
  from sensor_collect_data aa
 right outer join sensor_collect_region bb
    on aa.region = bb.region

     
9. 左连接和右连接进行union操作

select *
  from sensor_collect_data aa
  left join sensor_collect_region bb
    on aa.region = bb.region
union
select *
  from sensor_collect_data aa
 right join sensor_collect_region bb
    on aa.region = bb.region	

    
10. 结论
        join和inner join等价
        left join和left outer join等价
        right join和right outer join等价
        left join与right join进行union操作和full join等价    
11.附建表语句
11.1 建表语句一

create table SENSOR_COLLECT_DATA
(
  sensor_id NUMBER(16) not null,
  region    VARCHAR2(16) not null,
  s1        NUMBER(6,3),
  s2        NUMBER(6,3),
  s3        NUMBER(6,3)
);
comment on table SENSOR_COLLECT_DATA
  is '传感器采集数据';
comment on column SENSOR_COLLECT_DATA.sensor_id
  is '数据id实体唯一标识';
comment on column SENSOR_COLLECT_DATA.region
  is '传感器安装区域';
comment on column SENSOR_COLLECT_DATA.s1
  is '传感器采集的值1';
comment on column SENSOR_COLLECT_DATA.s2
  is '传感器采集的值2';
comment on column SENSOR_COLLECT_DATA.s3
  is '传感器采集的值3';
insert into SENSOR_COLLECT_DATA (sensor_id, region, s1, s2, s3)
values (20191502, '2019', 12, 33, 55);
insert into SENSOR_COLLECT_DATA (sensor_id, region, s1, s2, s3)
values (20191514, '2018', 22, 33, 5);
insert into SENSOR_COLLECT_DATA (sensor_id, region, s1, s2, s3)
values (20191513, '2018', 2, 3, 66);
insert into SENSOR_COLLECT_DATA (sensor_id, region, s1, s2, s3)
values (20191515, '2028', 8, 56, 77);
insert into SENSOR_COLLECT_DATA (sensor_id, region, s1, s2, s3)
values (20191517, '2017', 22, 33, 33);
insert into SENSOR_COLLECT_DATA (sensor_id, region, s1, s2, s3)
values (20191516, '2017', 22.22, 33.33, 55.33);
insert into SENSOR_COLLECT_DATA (sensor_id, region, s1, s2, s3)
values (20191501, '2019', 12.88, 888.55, 3.22);
commit;

11.2 建表语句二

create table sensor_collect_region
(
  region         VARCHAR2(16) not null,
  region_name    VARCHAR2(128),
  region_type    VARCHAR2(128)
);
comment on table sensor_collect_region
  is '传感器采集区域';
comment on column sensor_collect_region.region
  is '传感器安装区域,实体唯一标识';
comment on column sensor_collect_region.region_name
  is '名称';
comment on column sensor_collect_region.region_type
  is '类型';
insert into SENSOR_COLLECT_REGION (region, region_name, region_type)
values ('2017', '江苏', '1');
insert into SENSOR_COLLECT_REGION (region, region_name, region_type)
values ('2018', '福建', '2');
insert into SENSOR_COLLECT_REGION (region, region_name, region_type)
values ('2019', '浙江', '1');
insert into SENSOR_COLLECT_REGION (region, region_name, region_type)
values ('2016', '黑龙江', '3');
commit;  

以上,感谢.

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
inner join是一种等值连接,它只返回两个表联结字段相等的行。left outer join是左外连接,它返回包括左表的所有记录和右表联结字段相等的记录。right outer join是右外连接,它返回包括右表的所有记录和左表联结字段相等的记录。full outer join是全外连接,它返回包括左表和右表的所有记录,无论是否有匹配的记录。所以,这些连接类型主要区别在于它们返回的记录集合的不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [inner join、outer joinright joinleft join 之间区别](https://blog.csdn.net/dingjianmin/article/details/92009385)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [oracle基础积累-join,left join,right join,inner join,full join,left outer join,right outer join 之间...](https://blog.csdn.net/zhangbeizhen18/article/details/101002029)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值