SQL语句中LEFT JOIN ON WHERE和LEFT JOIN ON AND的区别

先上代码:

declare @tb table (name varchar(10),sex int)

declare @tb2 table (name varchar(10),age int)

insert into @tb values('zhangsan',12)
insert into @tb values('lisi',18)
insert into @tb values('wangwu',14)

insert into @tb2 values('zhangsan',12)
insert into @tb2 values('zhangsan',20)
insert into @tb2 values('lisi',18)
insert into @tb2 values('wangwu',14)

--select * from @tb
--select * from @tb2

select A.name,A.sex,B.age from @tb A left join @tb2 B on A.name=B.name -- A.name='zhangsan'

select A.name,A.sex,B.age from @tb A left join @tb2 B on A.name=B.name AND A.name='zhangsan'

select A.name,A.sex,B.age from @tb A left join @tb2 B on A.name=B.name WHERE A.name='zhangsan'

 

在left join 和right join  或者 full join 操作时,会生成临时表, on  是生成临时表时起作用,临时表生成后就没作用了,where 是生成临时表后对临时表中的数据进行过滤操作

 inner join 会返回左右两表到交集  (相当于 逗号连接的表连接 select * from TableA,TableB where TableA.id=TableB.id)

left join 会返回左表到全部数据,右表没有数据时用null填补   

right join 会返回右表到全部数据,左表没有数据时用null填补

full join 会返回两表到并集 没有数据到一方用null 填补

结论:

1. left join, right join, full join 操作时,会生成一个临时表

2. on 是生成临时表的条件, 一个表中如果没有对应数据用null填补

3. where 是生成临时表后,对临时表中的数据进行过滤 返回过滤后到数据

 

相关链接:

https://www.cnblogs.com/reaptomorrow-flydream/p/8145610.html

https://www.cnblogs.com/GH0522/p/8579423.html

posted @ 2018-11-07 10:59  ★Angel★  阅读(2609)  评论(0编辑  收藏  举报