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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM