一、inner join
(1)正常情况下,内连接中on 和where,没有区别。
(2)如果使用where时没有完成所有连接,必须使用on
如下图,必须使用on。否则会报错。
where用于对前面的表操作(SELECT、UPDATE、DELETE)的限定,所以where需要在所有join连接完成后才能使用。
二、left join
(1)on是生成临时表时使用的条件
左连接时是以左表为基础的,左表的记录将会全部表示出来,而右表只会显示符合搜索条件即on后面的条件的记录。
即on对左表是不起作用的,只对右表起作用。
(2)where是对临时表的组合后的结果进行筛选,所以对左右表都是有作用的。
🌰例子1:
SELECT a.id, b.id FROM a LEFT JOIN b ON a.id = b.id AND a.id =1 AND b.id = 1
🌰例子2:
SELECT a.id, b.id FROM a LEFT JOIN b ON a.id = b.id where a.id =1 AND b.id = 1
🌰1和🌰2 就是明显的列子:其中语句1中的b.id是过滤b表的信息,a.id对a表过滤无效;
语句2中b.id和a.id都生效,即where条件是在left on生效后即形成临时表后才产生的生效条件。