mysql左右连接的区别_SQL: 左连接(left join )或者右连接( right join )在 on 后面直接跟and 或 where条件的区别...

个人理解以下几条:

on 后直接跟and条件则只能对_从表_(B)的结果进行筛选,对主表A数据无影响;即对B表的结果集根据and后面的条件进行筛选后再将数据与主表A进行连接

如果要对_主表_(A)的结果进行筛选,则筛选条件一般放在where后面;即where 后的条件则是先将主表A和从表B连接后再对其总结果集C进行筛选。

where后的条件无论是针对主表A还是从表B的筛选都有用

话不多说,先看执行效果就知道了。

select A.id,A.name,B.area_id,B.park_name from t_sys_city_code A

left join eimm_park_inf B on A.id=B.area_id

order by A.id,B.park_name

执行结果1:on 后and A.id=B.area_id  这个条件只筛选掉了从表B中的数据,主表A中数据未受影响

6f22a12671b288c7f6bc50e7ab8a30d7.png

select A.id,A.name,B.area_id,B.park_name from t_sys_city_code A

left join eimm_park_inf B on A.id=B.area_id

and A.id not in('610103','610102','610104','0')

order by A.id,B.park_name

执行结果2:on 后面直接 and A.id not in('610103','610102','610104','0')   这个条件虽然看起来是针对主表A中的数据进行筛选,但是结果依然对主表A没有影响,筛选掉的只是从表B中能与主表A ('610103','610102','610104','0') 这几个条件关联起来的数据

cb03657472921a3a8afb74104639d392.png

select A.id,A.name,B.area_id,B.park_name from t_sys_city_code A

left join eimm_park_inf B on A.id=B.area_id

and B.park_name='光电孵化协同创新工程示范基地'

and A.id not in('610103','610102','610104','0','61010a')

order by A.id,B.park_name

执行结果3:on后and B.park_name='光电孵化协同创新工程示范基地' 条件,只是将从表B 的park_name='光电孵化协同创新工程示范基地'的这条数据过滤掉了,这里依然对主表A的数据未造成影响

90648405c9e5ecbf7d3d83292f506e71.png

select A.id,A.name,B.area_id,B.park_name from t_sys_city_code A

left join eimm_park_inf B on A.id=B.area_id

where A.id not in('610103','610102','610104','0')

order by A.id,B.park_name

执行结果4:主表A和从表B进行关联后得到结果集C,where   A.id not in('610103','610102','610104','0') 条件对结果集C进行筛选

47b149bc9e894a88cda8e8aac716c256.png

select A.id,A.name,B.area_id,B.park_name from t_sys_city_code A

left join eimm_park_inf B on A.id=B.area_id

and B.park_name='光电孵化协同创新工程示范基地'

where A.id not in('610103','610102','610104','0')

order by A.id,B.park_name

执行结果5:on后and   B.park_name='光电孵化协同创新工程示范基地' 条件针对从表B进行了筛选后,在与主表A关联接到结果集C,where   A.id not in('610103','610102','610104','0')  条件在对结果集C进行了筛选

f17e1dd1d3233d6bbba4700660de2a66.png

select A.id,A.name,B.area_id,B.park_name from t_sys_city_code A

left join eimm_park_inf park on A.id=B.area_id

where A.id not in('610103','610102','610104','0')

and B.park_name='光电孵化协同创新工程示范基地'

order by A.id,B.park_name

执行结果6:where后面的结果直接对主表A和从表B关联后的结果进行了筛选

dd0c507cea728f0b8fbdf9a97db0fbcd.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值