一、left join 在on 和where 过滤对比
A表结构以及数据:
id name grade dept
1 cid1 100 10
2 cid2 90 20
3 cid3 60 10
4 cid4 80 10
5 cid5 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 cid1 100 10 10 IT1
2 cid2 90 20 20 IT2
3 cid3 60 10 NULL NULL
4 cid4 80 10 10 IT1
5 cid5 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 cid1 100 10 10 IT1
2 cid2 90 20 20 IT2
4 cid4 80 10 10 IT1
结论:
当把过滤条件写在left join on上面会让基表所有数据都能显示,不满足条件的右表会以null填充,当过滤条件写在where上只会让符合筛选条件的数据显示
二 、inner join
1.两张表join并且筛选分数大于等于80的,条件放在join on上面
select
A.id,A.name,A.grade,A.dept,B.id,B.name
from
A inner join B
on
A.dept = B.id
and
A.grade >=80
结果为:
1 cid1 100 10 10 IT1
2 cid2 90 20 20 IT2
4 cid4 80 10 10 IT1
2.两张表join并且筛选分数大于等于80的,条件放在where上面
select
A.id,A.name,A.grade,A.dept,B.id,B.name
from
A inner join B
on
A.dept = B.id
where
A.grade >=80
结果为:
1 cid1 100 10 10 IT1
2 cid2 90 20 20 IT2
4 cid4 80 10 10 IT1
结论:
当把过滤条件写在inner join on上面和where 上面结果是一致的
原文:https://blog.youkuaiyun.com/qq_20641565/article/details/52950087