今天有人提到,用外连接查询,状态的条件要写到对应的关联表后。而不应该写到最后结果的where后面,如代码(主要是b.status = 1 放在哪里的问题)
//大佬说规范的写法
SELECT * FROM student a
left JOIN kecheng b on a.KeId = b.KeId and b.status = 1
//大佬说不规范的写法
SELECT * FROM student a
left JOIN kecheng b on a.KeId = b.KeId
WHERE b.STATUS = 1
我创建了两张表
使用第一条语句结果为
第二条结果为
其实就是外连接的时候后面跟需要的条件。外连接不要放弃每一条数据。及时为空的都要显示出来。
但是我们现如今都是用外连接查出所有数据,再最后加上where条件筛选出我们想要的数据。
其实第二条结果和使用inner join的效果一样
SELECT * FROM student a
INNER JOIN kecheng b on a.KeId = b.KeId
WHERE b.STATUS = 1
但是在实际应用中,如果关联3张表以上,内连接有时候会直接筛掉我们可能想要的数据。
应该说从代码的规范上说,外连接的筛选条件的确应该更在关联表的后面