oracle join 连接,oracle join连接方法以及left join中on 和where的区别

1.join连接方法分类:

(1)自连接:inner join,join (只返回两张表连接列的匹配项,没有空值代替这一说)

以下三种查询结果一样:

select * from mz_cfzb a inner join mz_cfmxb on a.id=b.zb_id;

select * from mz_cfzb a inner join mz_cfmxb on a.id=b.zb_id;

select * from mz_cfzb a,mz_cfmx b wherea.id=b.zb_id;

(2)笛卡尔乘积:cross join (不加任何条件,达到M*N的结果集,如果笛卡尔乘积加上连接条件和自连接一样的结果)

以下两种查询结果一样:

select * from mz_cfzb a cross join mz_cfmxb;

select * from mz_cfzb a, mz_cfmx b;

(3)左外连接:left join (列出左边表的全部及右边表符合条件的,不符合条件的以空值代替)

(在(+)计算时,哪个带(+)哪个需要条件符合的,另一个全部的。即放左即右连接,放右即左连接)

以下两种查询结果一样:

select * from mz_cfzb a left join mz_cfmx bon a.id=b.zb_id;

select * from mz_cfzb a,mz_cfmx b wherea.id=b.zb_id(+);

(4)右外连接:right join (列出右边表的全部及左边表符合条件的,不符合条件的以空值代替)

以下两种查询结果一样:

select * from mz_cfzb a right join mz_cfmxb on a.id=b.zb_id;

select * from mz_cfzb a,mz_cfmx b wherea.id(+)=b.zb_id;

(5)全连接:full join (产生M+N的结果集,列出两表全部的,不符合条件的以空值代替)

select * from mz_cfzb a full join mz_cfmx bon a.id=b.zb_id;

2.left join中on与where的区别:

select a.*,b.* from A a left join B b ona.id=b.id;

select a.*,b.* from A a left join B b ona.id=b.id where b.name=’c’;

第一个SQL,如果B表中没有符合条件的数据,因为是left join,所以查询的结果相当于是select a.* from A a。

第二个SQL,条件在where中,如果B表中没有符合条件的数据,查询的结果就是为空。left join也就失去了意义。希望能够帮到你。

在使用left jion时,on和where条件的区别如下:

(1)      on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

(2)      where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

如果有where条件,顺序是on 后where,如果要使用where条件可以用and代替。

select a.*,b.* from A a left join B b ona.id=b.id and b.name=’c’;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值