left join 或right join 加上where条件后连接失效,等同于inner join

做项目写SQL时,在使用left join 和where 时混淆了,网上找到了如下案例,记录一下。
原因:where是先连接然后再筛选 

举例:

表1:

  

表2:

查询语句:select * from tab1 left JOIN tab2  on (tab2.id=tab1.id) where tab2.hobby = "游泳";

结果:

过程:

首先根据左连接生成如下中间表:

再根据where 条件进行过滤,筛选出hobby = "游泳"的一条记录,最终查询结果只有上述的一条记录。     所以left join 失效。

解决办法:将where 换成and 即:

查询的具体过程:将(tab2.hobby='游泳')作为条件放到 left join on 里面时,是对tab2里面的记录做过滤,也就是只会查出tab2中hobby='游泳的这一条数据和tab1进行拼接,具体查询结果如下所示。

查询语句:select * from tab1 left join tab2 on (tab2.id=tab1.id) and  (tab2.hobby='游泳');


————————————————
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值