Oracle 表连接详解(left join、left outer join)

1 概述

结果集(红色部分)如下:
在这里插入图片描述

2 示例

2.1 jion:内连接

with t_test1 as (
  select 1 sno, '张三' sname, '女' sex from dual union all 
  select 2 sno, '李四' sname, '男' sex from dual union all
  select 3 sno, '王五' sname, '女' sex from dual
), t_test2 as (
  select 1 sno, '武汉市' city from dual union all 
  select 4 sno, '咸宁市' city from dual
)
select t1.*, t2.*
  from t_test1 t1
  join t_test2 t2 on t2.sno = t1.sno;

查询结果:

SNO		SNAME	SEX		SNO		CITY
1		张三		女		1		武汉市

2.2 left join:左连接

with t_test1 as (
  select 1 sno, '张三' sname, '女' sex from dual union all 
  select 2 sno, '李四' sname, '男' sex from dual union all
  select 3 sno, '王五' sname, '女' sex from dual
), t_test2 as (
  select 1 sno, '武汉市' city from dual union all 
  select 4 sno, '咸宁市' city from dual
)
select t1.*, t2.*
  from t_test1 t1
  left join t_test2 t2 on t2.sno = t1.sno;
  -- 仅修改 left join

查询结果:

SNO		SNAME	SEX		SNO		CITY
1		张三		女		1		武汉市
2		李四		男
3		王五		女

2.3 right join:右连接

with t_test1 as (
  select 1 sno, '张三' sname, '女' sex from dual union all 
  select 2 sno, '李四' sname, '男' sex from dual union all
  select 3 sno, '王五' sname, '女' sex from dual
), t_test2 as (
  select 1 sno, '武汉市' city from dual union all 
  select 4 sno, '咸宁市' city from dual
)
select t1.*, t2.*
  from t_test1 t1
 right join t_test2 t2 on t2.sno = t1.sno;
  -- 仅修改 right join

查询结果:

SNO		SNAME	SEX		SNO		CITY
1		张三		女		1		武汉市
                 		4		咸宁市

2.4 full join:全连接

with t_test1 as (
  select 1 sno, '张三' sname, '女' sex from dual union all 
  select 2 sno, '李四' sname, '男' sex from dual union all
  select 3 sno, '王五' sname, '女' sex from dual
), t_test2 as (
  select 1 sno, '武汉市' city from dual union all 
  select 4 sno, '咸宁市' city from dual
)
select t1.*, t2.*
  from t_test1 t1
  full join t_test2 t2 on t2.sno = t1.sno;
  -- 仅修改 full join

查询结果:

SNO		SNAME	SEX		SNO		CITY
1		张三		女		1		武汉市
2		李四		男
3		王五		女
                 		4		咸宁市

3 扩展

3.1 left outer join 与 left join 没有区别!

简称,常用全称,了解即可
joininner join
left joinleft outer join
right joinright outer join
full jionfull outer join

3.2 写法:(+)

  • (+) 在哪边,就是 左连接 哪边
  • 示例 2.2 等同于下:
with t_test1 as (
  select 1 sno, '张三' sname, '女' sex from dual union all 
  select 2 sno, '李四' sname, '男' sex from dual union all
  select 3 sno, '王五' sname, '女' sex from dual
), t_test2 as (
  select 1 sno, '武汉市' city from dual union all 
  select 4 sno, '咸宁市' city from dual
)
select t1.*, t2.*
  from t_test1 t1,
       t_test2 t2
 where t1.sno = t2.sno(+);

查询结果:

SNO		SNAME	SEX		SNO		CITY
1		张三		女		1		武汉市
2		李四		男
3		王五		女
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼丸丶粗面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值