当两张表A和B在join时,条件筛选放在表join时的on上面和放在where上面得到的结果是不一样的。
如下创建两张表:
A表结构以及数据:
id name grade dept
1 lijie1 100 10
2 lijie2 90 20
3 lijie3 60 10
4 lijie4 80 10
5 lijie5 70 20
B表结构以及数据:
id name
10 IT1
20 IT2
1.两张表join并且筛选分数大于等于80的,条件放在join on上面
select
A.id,A.name,A.grade,A.dept,B.id,B.name
from
A left outer join B
on
A.dept = B.id
and
A.grade >=80
结果为:
1 lijie1 100 10 10 IT1
2 lijie2 90 20 20 IT2
3 lijie3 60 10 NULL NULL
4 lijie4 80 10 10 IT1
5 lijie5 70 20 NULL NULL
2.两张表join并且筛选分数大于等于80的,条件放在where上面
select
A.id,A.name,A.grade,A.dept,B.id,B.name
from
A left outer join B
on
A.dept = B.id
where
A.grade >=80
结果为:
1 lijie1 100 10 10 IT1
2 lijie2 90 20 20 IT2
4 lijie4 80 10 10 IT1
结论
当把过滤条件写在left join on上面会让基表所有数据都能显示,不满足条件的右表会以null填充,当过滤条件写在where上只会让符合筛选条件的数据显示。