sql left join时条件放在在on和where的区别
连接查询的时候可以on多个条件查询
以前做连接查询的时候,关联查询的都是一个条件,这两天面试接触到on可以设定多个条件,如此回来之后便进行了一个实验.
表user
id name age
1 一号 12
2 二号 13
3 三号 14
表course
user_id course score
1 数学 65
2 语文 83
1 英语 72
2 数学 91
对应的sql是这样的
SELECT * FROM useru LEFT JOIN course c ON c.user_id = u.id AND u.
name` = ‘一号’
查询的结果是这样的
可以看到,在left join的时候 on 后面的条件限制对左表并未起作用,因为没有对结果进行筛选,所以左表的数据全部出来了,但对应的右表是有关联不上的数据的,所以后面两条数据,右表部分为null
另一条语句则不一样了
SELECT * FROM user
u
LEFT JOIN course c ON c.user_id = u.id
WHERE u.name
= ‘一号’
一开始对这些挺疑惑的,后面查询看到大神说left join on多个条件时,对左表不起作用,只对右表产生作用,而inner join 则不一样了,inner join 时 on多个条件,对左表右表都可以起作用