演示数据库:Mysql
创建表
内连接
- 放在On后面
SELECT * FROM tb_singer t1 INNER JOIN tb_song t2 ON t1.id=t2.singer_id and t2.`name`='夜曲' WHERE t1.`name`='周杰伦';
- 放在Where后面
SELECT * FROM tb_singer t1 INNER JOIN tb_song t2 ON t1.id=t2.singer_id WHERE t1.`name`='周杰伦' and t2.`name`='夜曲'
左连接
- 放在On后面
SELECT * FROM tb_singer t1 LEFT JOIN tb_song t2 ON t1.id=t2.singer_id and t2.`name`='夜曲' WHERE t1.`name`='周杰伦';
- 放在Where后面
SELECT * FROM tb_singer t1 LEFT JOIN tb_song t2 ON t1.id=t2.singer_id WHERE t1.`name`='周杰伦' and t2.`name`='夜曲'
右连接
- 放在On后面
SELECT * FROM tb_song t1 RIGHT JOIN tb_singer t2 ON t1.singer_id=t2.id and t1.`name`='夜曲' WHERE t2.`name`='周杰伦';
- 放在Where后面
SELECT * FROM tb_song t1 RIGHT JOIN tb_singer t2 ON t1.singer_id=t2.id WHERE t2.`name`='周杰伦' and t1.`name`='夜曲';
总结
-
对于内连接查询,过滤条件放在On或者Where后面得到的结果是一样的。
-
对于左连接查询,过滤条件放在On后面,不会对左表的数据进行过滤,依然显示左表全部数据,右表不匹配则对应列显示为NULL。
过滤条件放在Where后面,会对左表数据进行过滤。即理解为过滤条件放在On后面是先过滤后关联,过滤条件放在Where后面是先关联后过滤。 -
对于右连接查询,过滤条件放在On后面,不会对右表的数据进行过滤,依然显示右表全部数据,左表不匹配则对应列显示为NULL。
过滤条件放在Where后面,会对右表数据进行过滤。即理解为过滤条件放在On后面是先过滤后关联,过滤条件放在Where后面是先关联后过滤。