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

本文深入解析SQL中的Join操作,包括Inner Join、Left Join、Right Join和Full Join的不同应用场景及实现方式,详细阐述了ON和WHERE子句在Join操作中的区别与使用场景。

先上代码:

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

转载于:https://www.cnblogs.com/yaoweijun/p/9921314.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值