left(right) join on后面 加条件和where后面加条件的区别
(1)select * from A left join B on A.id = B.id **and** A.name='lily' and B.score is not null;
(2)select * from A left join B on A.id = B.id **where** A.name='lily' and B.score = '100'
区别:
on只是对局部条件做限制
where是对全局做限制,就是相当于对最后查询出来的整个结果做限制
对于(1):
会查询出A表中是所有数据, 无论on后面跟什么条件,主表A的数据都会被查出来,即使 and B.score is not null 没有符合条件的数据也不会过滤掉A表的数据,所以限制条件没用。比如A表有50条记录,过滤后仍有50条
对于(2):
会先查询出A表所有的数据,然后根据where条件过滤掉不符合的数据。比如A表有50条记录,过滤后可能有40条
left join,right join,(inner)join的区别
1:inner join
理解为“有效的连接”,就是根据on后面的关联条件,两张表中都有的数据才会显示; on 可以直接用where来替代。
2:left join
理解为“主表全显,从表看on,从表没有数据显示null”(主表数据不受影响),即主表全显示,连接后的表看on后面的选择条件,left join后面的条件,并不会影响左表的数据显示,左表数据会全部显示出来,连接的表如果没有数据,则全部显示为null.
3: right join right join
理解为“主表看on,从表全显,主表没有数据显示null”(右表数据不受影响),即右表数据全部显示,主表数据看on后面的选择条件